【问题标题】:How to create daily log folder in python logging如何在 python 日志中创建每日日志文件夹
【发布时间】:2015-05-14 02:36:27
【问题描述】:

我想将日志文件输出到python中的日常文件夹中。

我可以在处理程序中创建日志路径,如“../myapp/logs/20150514/xx.log”到当前日期。 但问题是日期变化时日志路径并没有变化。

我在启动 长期运行 python 脚本 xx.py 时创建了日志实例,现在该实例的日志路径为“../myapp/logs/20150514/xx.log”。但是明天,由于实例没有改变,所以它的路径仍然是“../myapp/logs/20150514/xx.log”,应该是“../myapp/logs/20150515/xx.log”。

如何将日志输出到日常文件夹?

我的获取日志实例代码:

import os
import utils
import logging
from logging.handlers import RotatingFileHandler
import datetime

def getInstance(file=None):
    global logMap
    if file is None:
        file = 'other/default.log'
    else:
        file = file + '.log'
    if(logMap.has_key(file)):
        return logMap.get(file)
    else:
        visit_date = datetime.date.today().strftime('%Y-%m-%d')
        date_file = os.path.join(visit_date,file)
        log_path = utils.read_from_ini('log_path').strip()
        log_path = os.path.join(log_path,date_file);
        if not os.path.isdir(os.path.dirname(log_path)):
            os.makedirs(os.path.dirname(log_path))
        logging.basicConfig(datefmt='%Y-%m-%d %H:%M:%S',level=logging.INFO)
        log_format = '[%(asctime)s][%(levelname)s]%(filename)s==> %(message)s'
        formatter = logging.Formatter(log_format)
        log_file = RotatingFileHandler(log_path, maxBytes=10*1024*1024,backupCount=5)
        log_file.setLevel(logging.INFO)
        log_file.setFormatter(formatter)
        instance = logging.getLogger(file)
        instance.addHandler(log_file)
        logMap[file] = instance
        return instance

【问题讨论】:

    标签: python logging


    【解决方案1】:

    您的RotatingFileHandler 不会按时间轮换,而是按大小轮换。这就是 maxBytes 参数的用途。如果要根据时间旋转,请改用TimedRotatingFileHandler。请注意,这适用于文件名,但不适用于路径(据我所知)。您可以拥有 20150505.log、20150506.log,但不能拥有 20150505/mylog.log、20150506/mylog.log。

    如果您想旋转文件夹名称,您可以通过继承 TimedRotatingFileHandler 并添加您自己的逻辑来实现。

    【讨论】:

    • 是的,TimedRotatingFileHandler 仅适用于文件名。如果没有其他优雅的解决方案,我会考虑创建它的子类。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2018-01-10
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多