我在python中编写了一个名为 logger 的Singleton
模块,它使用了python的logging
模块。我的 App.py 使用 logger 模块处理日志。
我于2014年11月3日运行了App.py并创建了logger.log(A)。
我于2014年11月4日运行了App.py并创建了logger.log。 A 已重命名为logger.log.2014-11-03。所以日志轮换发生了。没关系。
但是,从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的日志
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
为什么日志轮换没有正常发生?请帮帮我。感谢。