如何在日志文件中创建带有记录号的 python 记录器



我正在尝试使用日志记录模块创建一个python记录器。 如何为多个文件创建多个记录器,其中第一个字符将是记录号? 使用格式化程序我没有找到如何做到这一点

formatter=logging.Formatter('%(recored_number)s %(asctime)s %(message)s %(name)s')

这就是我希望文件的样子:

第一个日志文件:

#1 2019-09-05 08:55:10,000 first logger line for log 1 INFO logger
#2 2019-09-05 08:55:20,000 second logger line for log 1 INFO logger

第二个日志文件:

#1 2019-09-05 08:58:10,000 first logger line for log 2 INFO logger
#2 2019-09-05 08:58:20,000 second logger line for log 2 INFO logger

在这个问题中也实现了类似的行为

唯一的区别是,您必须在处理每个日志记录时递增计数器。

为此,您可以添加单一实例类RecordCounter

import logging
class RecordCounter:
_instance = None
_count = 0
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = object.__new__(cls, *args, **kwargs)
return cls._instance
def count(self):
self._count += 1
return self._count
class ContextFilter(logging.Filter):
def filter(self, record):
record.record_number = RecordCounter().count()
return True
logging.basicConfig(
level=logging.DEBUG,
format='%(record_number)s %(asctime)s %(message)s %(name)s')
logger = logging.getLogger(__name__)
logger.addFilter(ContextFilter())

我刚刚在每个日志记录中使用额外的答案:

formatter=logging.Formatter('%(recored_number)s %(asctime)s %(message)s %(name)s')
log_1_counter=1
log_2_counter=1
log1.info('first logger line for log 1',extra=
{'record_number':str(log_1_counter)})
log_1_counter+=1
log_1_counter=1
log_2_counter=1
log1.info('first logger line for log 1',extra= 
{'record_number':str(log_1_counter)})
log_1_counter+=1
log1.info('second logger line for log 1',extra= 
{'record_number':str(log_1_counter)})
log2.info('first logger line for log 2',extra= 
{'record_number':str(log_2_counter)})
log_2_counter+=2
log2.info('second logger line for log 2',extra= 
{'record_number':str(log_2_counter)})

这可以证明不是最好的解决方案,但它对我有用

最新更新