【问题标题】:Including date in the log file name & creating log files of certain size while keeping last 3 log files in python with `logging.config.dictConfig()`在日志文件名中包含日期并创建一定大小的日志文件,同时使用 `logging.config.dictConfig()` 在 python 中保留最后 3 个日志文件
【发布时间】:2019-02-16 03:20:16
【问题描述】:

我正在使用 config 设置 python 记录器。我希望日志文件包含日期(可能还有时间)。我还希望在那个日期,每个日志文件都只有特定的大小,并且只保留 3 个这样的旧日志文件。

例如,我想获取以下形式的日志文件:

mylog-2018-09-11.log
mylog-2018-09-11.log.1
mylog-2018-09-11.log.2
mylog-2018-09-11.log.3

按照here 的解释,我尝试使用以下形式的配置来旋转文件处理程序:

config = {
    #...
    'handlers': {
        'file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'mplog.log',
            'mode': 'w',
            'formatter': 'detailed',
            'maxBytes': 10000,
            'backupCount': 3
        },
    },
    #...
}
logging.config.dictConfig(config)

它会产生如下的日志文件:

mylog.log
mylog.log.1
mylog.log.2
mylog.log.3

但我无法理解,如何在日志文件名中获取日期。是否可以使用配置和一些处理程序来做到这一点,比如RotatingFileHandlerTimeRotatingFileHandler?或者说我可以以某种方式将日志文件名设置为包含dictConfig() 调用之后的日期吗?

【问题讨论】:

    标签: python python-3.x logging


    【解决方案1】:

    您的示例显示了一个RotatingFileHandler,它根据大小而不是日期来旋转文件。您需要使用TimedRotatingFileHandler,如记录的here。你可以像RotatingFileHandler一样配置它。

    更新:如果你想同时限制日期的大小,你需要使用一个处理程序子类来做你想要的。

    【讨论】:

    • 你确定吗? maxBytes 存在于RotatingFileHandler 的参数中,但不存在于TimedRotatingFileHandler
    • 当我说“以同样的方式”时,我的意思是“以同样的一般方式”,而不是“完全同样的方式”。
    • 抱歉还不能理解。 “处理程序子类”是什么意思?我必须写一个自定义的?有链接吗?
    • [...continued] this 的回答是否表明它不可能?
    • 对不起,没有链接(我不认为这是一个常见的要求)。是的,您必须编写自定义代码,如果您知道要实现的目标,可能的。
    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多