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
使用logging.config.dictConfig以{}格式进行Python日志记录_Python_Logging - Fatal编程技术网

使用logging.config.dictConfig以{}格式进行Python日志记录

使用logging.config.dictConfig以{}格式进行Python日志记录,python,logging,Python,Logging,我试图在python日志模块中使用string.format()样式。我从这个站点复制了一些示例,并用新的格式化程序对其进行了修改。我想使用logging.config.dictConfig来指定日志记录格式。 我的剧本是: import sys,logging,logging.config 默认日志记录={ “版本”:1, “禁用现有日志记录器”:False, “格式化程序”:{ “标准”:{ '格式':'{message}', 'style':'{'#使用string.format() },

我试图在python日志模块中使用string.format()样式。我从这个站点复制了一些示例,并用新的格式化程序对其进行了修改。我想使用logging.config.dictConfig来指定日志记录格式。 我的剧本是:

import sys,logging,logging.config
默认日志记录={
“版本”:1,
“禁用现有日志记录器”:False,
“格式化程序”:{
“标准”:{
'格式':'{message}',
'style':'{'#使用string.format()
},
},
“处理程序”:
'默认值':{
“级别”:“信息”,
“格式化程序”:“标准”,
'class':'logging.StreamHandler',
'流':'ext://sys.stdout“,#默认值为stderr
},
},
“伐木工人”:{
“uuu main_uuuuu”:{#如果uuuu name_uuuuu==”uuuuuu main_uuuuuu'
'handlers':['default'],
“级别”:“调试”,
“格式化程序”:“标准”
},
'': {
'handlers':['default'],
“级别”:“信息”,
“格式化程序”:“标准”
},
}
}
logger=logging.getLogger(_名称__)
logging.config.dictConfig(默认的日志记录)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
info('Hello,{},'log')
系统出口(0)
但提出了一个例外:

---记录错误---回溯(最近一次调用):文件“/usr/lib/python3.8/Logging/init.py”,第1081行,在emit中 msg=self.format(record)File“/usr/lib/python3.8/logging/init.py”,第925行,格式为 以格式返回fmt.format(record)文件“/usr/lib/python3.8/logging/init.py”,第664行 record.message=record.getMessage()文件“/usr/lib/python3.8/logging/init.py”,第369行,在getMessage中 msg=msg%self.args TypeError:在字符串格式化调用堆栈期间未转换所有参数:文件“test/dbg/log.py”,第行 48,在 info('Hello,{}','log')消息:'Hello,{}'参数:('log',)

由于某些原因,python正在尝试使用%formatter(msg=msg%self.args)格式化。如何修改脚本以指向正确的格式?如有任何帮助,将不胜感激。 提前谢谢。
-Uri

解决此问题的一种方法是围绕内置日志格式化程序创建精简适配器

例如:

import sys,logging,logging.config
类standardFormatterFactory(logging.Formatter):
定义初始化(self、fmt、datefmt、style、validate=False):
尝试:
#3.x
super(standardFormatterFactory,self)。\uuuuu init\uuuuuu(fmt=fmt,datefmt=datefmt,style=style,validate=validate)
除:
# 2.7
super(standardFormatterFactory,self)。\uuuuu init\uuuuuu(fmt=fmt,datefmt=datefmt)
self.\u usesTime=self.\u fmt.find('%(asctime)')>=0或self.\u fmt.find('{asctime}')>=0
def usesTime(自我):
''重写logging.Formatter.usesTime()'''
返回自我
def格式(自我,记录):
''重写logging.Formatter.format()'''
尝试:
返回超级(standardFormatterFactory,self).format(记录=记录)
除类型错误外,例如:
#消息包含{}个格式化说明符
record.message=record.msg.format(*record.args)
如果self.usesTime():
record.asctime=self.formatTime(record,self.datefmt)
返回自身格式(**记录格式)
默认日志记录={
“版本”:1,
“禁用现有日志记录器”:False,
"传播":假,,
“格式化程序”:{
“标准”:{
“()”:standardFormatterFactory,
“fmt”:“{asctime}-{levelname}:{message}”,
“datefmt”:“%Y-%m-%d%H:%m:%S”,
“样式”:“{”
},
},
“处理程序”:
'默认值':{
“级别”:“调试”,
“格式化程序”:“标准”,
'class':'logging.StreamHandler',
'流':'ext://sys.stdout“,#默认值为stderr
},
},
“伐木工人”:{
“uuu main_uuuuu”:{#如果uuuu name_uuuuu==”uuuuuu main_uuuuuu'
'handlers':['default'],
“级别”:“调试”,
“格式化程序”:“标准”
},
}
}
logger=logging.getLogger(_名称__)
logging.config.dictConfig(默认的日志记录)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
info('Hello,{},'log')
系统出口(0)