我正在尝试使用日志记录模块创建一个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)})
这可以证明不是最好的解决方案,但它对我有用