这是我的python logging.py文件
import logging
import logging.handlers
import os
import __main__
__all__ = ['Logger']
Mkdir函数
def mkdir_p(*args):
"""Creates the directory if it does not exist and returns the base directory path"""
new_path = os.path.join(*args)
new_dir = os.path.dirname(new_path)
if not os.path.exists(new_dir):
os.makedirs(new_dir)
return new_path
用于记录会话ID的其他过滤器
class ContextFilter(logging.Filter):
"""
This is a filter which injects contextual information into the log.
"""
def filter(self, record):
if hasattr(__main__, 'context') and hasattr(__main__.context, 'id'):
record.id = __main__.context.id
else:
record.id = ""
return True
实际的记录器类
class Logger(object):
logging_formatters = {
'fmt': "[%(asctime)s] [ID:%(id)s] %(levelname)8s [%(thread)d] (%(name)s:%(lineno)03d) - %(message)s",
'datefmt': "%d %b %Y %H:%M:%S"
}
def __new__(
self,
application_name=None,
filename=None,
*args,
**kwargs
):
if not isinstance(application_name, str) or not application_name:
raise ValueError("Logger class expects a string type application name")
if filename is None:
filename = application_name
if not filename.endswith(".log"):
filename = filename.split('.')[0] + ".log"
log_path = kwargs.get('log_path') or os.getenv('LOG_PATH', os.getcwd())
service_name = kwargs.get('service_name', '')
console_level = kwargs.get('console_level', logging.INFO)
file_level = kwargs.get('file_level', logging.DEBUG)
logger = logging.getLogger(application_name)
logger.propagate = True
# Return the logger if it or its parent already has handlers associated
current = logger
while True:
parent = current.parent
if len(current.handlers) > 0:
return logger
current = parent
if isinstance(parent, logging.RootLogger):
break
# Create console stream handler
console_handler = logging.StreamHandler()
f = ContextFilter()
console_handler.addFilter(f)
console_handler.setLevel(console_level)
console_handler.setFormatter(
logging.Formatter(**self.logging_formatters)
)
# Create rotating file log handler
file_handler = logging.handlers.TimedRotatingFileHandler(
filename=mkdir_p(log_path, service_name, filename),
when="midnight"
)
file_handler.addFilter(f)
file_handler.setLevel(file_level)
file_handler.setFormatter(
logging.Formatter(**self.logging_formatters)
)
# Attach both handlers to the generated logger object
logger.addHandler(console_handler)
logger.addHandler(file_handler)
logger.setLevel(min(console_level, file_level))
return logger
碰巧的是日期是17,但是日志是写在翻滚文件中,而不是新文件中。旧的处理程序被以某种方式使用。我想念什么?
我正在使用基于时间的处理程序进行午夜滚动。