Python日志记录:自动日志轮换没有正确进行

时间:2014-11-06 08:08:05

标签: python logging

我在python中编写了一个名为 logger Singleton模块,它使用了python的logging模块。我的 App.py 使用 logger 模块处理日志。

  1. 我于2014年11月3日运行了App.py并创建了logger.log(A)。

  2. 我于2014年11月4日运行了App.py并创建了logger.log。 A 已重命名为logger.log.2014-11-03。所以日志轮换发生了。没关系。

  3. 但是,从11月5日开始,我的生产系统上的supervisord连续运行App.py时,我得到了以下结果

    (11月5日)logger.log有2014-05-01的日志 (11月6日)logger.log(size = 3.6M +)包含2014-06-01的日志 (11月6日)logger.log.2014-11-05(size = 76M)包含2014-06-01的日志

  4. 2014-05-01的日志在哪里?

    我的logger.py

    import logging.config
    import sys
    
    class Singleton(type):
        _instances = {}
        def __call__(cls, *args, **kwargs):
            if cls not in cls._instances:
                cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
            return cls._instances[cls]
    
    class Logger(object):
        __metaclass__ = Singleton
    
        def __init__(self, *args, **kwds):
            print "Logger Init Starts"
            self.configFile = None
            if args:
                self.configFile = args[0]
            else:
                sys.exit("ERROR! Config file not passed to Logger class")
            logging.config.fileConfig(self.configFile)
            self.logger = logging.getLogger('Logger')
            self.logger.info('log handler initilizes')
            print "Logger Init Ends"
    
        def debug(self, msg):
            self.logger.debug(msg)
    
        def info(self, msg):
            self.logger.info(msg)
    
        def warn(self, msg):
            self.logger.warn(msg)
    
        def error(self, msg):
            self.logger.error(msg)
    
        def critical(self, msg):
            self.logger.critical(msg)
    
    if __name__ == "__main__":
        log = Logger()
    

    我在App.py模块

    中使用了上面的记录器模块
    # ... some imports
    import logger
    class App:
    
    def __init__(self, configFile=None):
        self.configFile = configFile;
        self.log = logger.Logger(self.configFile)
        self.log.info('constructor of App')
    # ... more code
    

    我的配置文件看起来像这样

    [loggers]
    keys=root
    
    [handlers]
    keys=file,screen
    
    [formatters]
    keys=simple,complex
    
    [logger_root]
    level=DEBUG
    handlers=screen,file
    
    [handler_file]
    class=handlers.TimedRotatingFileHandler
    interval=1
    backupCount=0
    formatter=complex
    level=DEBUG
    args=('../../logs/logger.log','midnight',1,0)
    
    [handler_screen]
    class=StreamHandler
    formatter=simple
    level=DEBUG
    args=(sys.stdout,)
    
    [formatter_simple]
    format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
    
    [formatter_complex]
    format=%(asctime)s - %(name)s - %(levelname)s - %(module)s : %(lineno)d - %(message)s
    

    为什么日志轮换没有正常发生?请帮帮我。感谢。

0 个答案:

没有答案