Python 日志记录 - 从配置文件配置旋转文件处理程序
Python Logging - Configuring Rotating File Handler From Config file
我有下面的配置文件,我用它来配置我的 python 模块中的日志记录,问题是它没有将时间戳附加到文件名,现在是日志文件创建的是 file_handler.log 但我希望它是 file_handler-timestamp.log
{
"version": 1,
"disable_existing_loggers": true,
"formatters": {
"simple": {
"format": "%(asctime)s %(levelname)s %(filename)s %(lineno)s %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S"
}
},
"handlers": {
"file_handler": {
"level": "INFO",
"class": "logging.handlers.TimedRotatingFileHandler",
"formatter": "simple",
"filename": "error.log",
"backupCount": 10,
"interval" : 1,
"when": "s",
"encoding": "utf8"
}
},
"loggers": { },
"root": {
"handlers": [
"file_handler"
],
"level": "DEBUG"
}
}
没有配置的工作代码
import logging
import time
from logging.handlers import RotatingFileHandler
logger = logging.getLogger('log_1')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', '%Y-%m-%d %H:%M:%S')
handler = RotatingFileHandler('log' + time.strftime('_%Y%m%d-%H%M') + '.log', maxBytes=2000, backupCount=10)
handler.setFormatter(formatter)
logger.addHandler(handler)
程序启动时动态更新配置的解决方法代码
import logging.config
import json
import time
fp = open("sample_config.json")
config = json.load(fp)
fp.close()
config['handlers']['file_handler']['filename'] += time.strftime('_%Y%m%d-%H%M') + '.log'
logging.config.dictConfig(config)
timestamp
什么时候的?文件何时旋转或何时创建?
如果您使用 TimedRotatingFileHandler
,那么当文件旋转时,时间戳将附加到文件名。
如果要将时间戳附加到日志文件名,则必须subclass RotatingFileHandler
并修改__init__
方法。然后将配置文件的“file_handler
”的"class"
项指向你新的class.
这很容易做到,但可能不是您需要的。
只需将时间戳附加到旋转的日志文件名,或者如果您也需要限制大小,请阅读此 answer
我有下面的配置文件,我用它来配置我的 python 模块中的日志记录,问题是它没有将时间戳附加到文件名,现在是日志文件创建的是 file_handler.log 但我希望它是 file_handler-timestamp.log
{
"version": 1,
"disable_existing_loggers": true,
"formatters": {
"simple": {
"format": "%(asctime)s %(levelname)s %(filename)s %(lineno)s %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S"
}
},
"handlers": {
"file_handler": {
"level": "INFO",
"class": "logging.handlers.TimedRotatingFileHandler",
"formatter": "simple",
"filename": "error.log",
"backupCount": 10,
"interval" : 1,
"when": "s",
"encoding": "utf8"
}
},
"loggers": { },
"root": {
"handlers": [
"file_handler"
],
"level": "DEBUG"
}
}
没有配置的工作代码
import logging
import time
from logging.handlers import RotatingFileHandler
logger = logging.getLogger('log_1')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', '%Y-%m-%d %H:%M:%S')
handler = RotatingFileHandler('log' + time.strftime('_%Y%m%d-%H%M') + '.log', maxBytes=2000, backupCount=10)
handler.setFormatter(formatter)
logger.addHandler(handler)
程序启动时动态更新配置的解决方法代码
import logging.config
import json
import time
fp = open("sample_config.json")
config = json.load(fp)
fp.close()
config['handlers']['file_handler']['filename'] += time.strftime('_%Y%m%d-%H%M') + '.log'
logging.config.dictConfig(config)
timestamp
什么时候的?文件何时旋转或何时创建?
如果您使用 TimedRotatingFileHandler
,那么当文件旋转时,时间戳将附加到文件名。
如果要将时间戳附加到日志文件名,则必须subclass RotatingFileHandler
并修改__init__
方法。然后将配置文件的“file_handler
”的"class"
项指向你新的class.
这很容易做到,但可能不是您需要的。 只需将时间戳附加到旋转的日志文件名,或者如果您也需要限制大小,请阅读此 answer