Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用日志文件中的记录编号创建python记录器_Python_Logging - Fatal编程技术网

如何使用日志文件中的记录编号创建python记录器

如何使用日志文件中的记录编号创建python记录器,python,logging,Python,Logging,我正在尝试使用日志模块创建一个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 logge

我正在尝试使用日志模块创建一个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
第二个日志文件:

#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

导入日志
类记录计数器:
_实例=无
_计数=0
定义(cls,*ARG,**kwargs):
如果cls.\u实例为无:
cls._实例=对象._新建(cls,*args,**kwargs)
返回cls.\u实例
def计数(自身):
自身计数+=1
返回自我。\u计数
类ContextFilter(logging.Filter):
def过滤器(自我,记录):
record.record_number=RecordCounter().count()
返回真值
logging.basicConfig(
级别=logging.DEBUG,
格式='(记录编号)s%(asctime)s%(消息)s%(名称)s')
logger=logging.getLogger(_名称__)
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)})

这显然不是最好的解决方案,但对我很有效

谢谢!这正是我在寻找的汉克斯之前的答案,我想创建多个日志文件,以便计数器是每个日志文件。如何计算每个日志文件的日志记录?通常,不同的日志输出由
logging.Handler
实例处理。您可以子类化
logging.Handler
来创建自己的处理程序,它将向每个记录添加
record\u number
。因此,单例在这里是不可用的,因为您将计算每个处理程序实例的记录。另外,
处理程序
filter()
方法,就像
logging.filter
——因此您可以轻松覆盖它,在处理程序中添加
记录编号
,而无需使用
logging.filter