Python:使用自定义* kwargs记录异常 [英] Python: Logging exceptions with custom *kwargs
本文介绍了Python:使用自定义* kwargs记录异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的问题:有一个简单的方法来使用自定义kwargs与logging.exception?
最小的例子如下:
import logging
import logging.handlers
def create_logger():
使用sys log初始化日志
logger = logging.getLogger()
form ='%(asctime)s [%(levelname) - 8s]%(xyz)s%(message)s'
local_log_handler = logging.handlers.SysLogHandler(address ='/ dev / log')
formatter = logging.Formatter(form)
local_log_handler.setFormatter(formatter)
logger.addHandler(local_log_handler)
return logger
log = create_logger()
try:
raise AttributeError(whatever)
除了:
log.warn('Alarm!Fire!',extra = {'xyz':'POLICE'})
log.exception('')
输出:
追溯(最近的最后一次呼叫):
文件logexample.py,第27行,< module>
log.exception('')
文件/usr/lib/python2.7/logging/__init__.py,第1172行,异常
self.error(msg,exc_info = 1,* args)
文件/usr/lib/python2.7/logging/__init__.py,行1166,错误
self._log(ERROR,msg,args,** kwargs)
文件/usr/lib/python2.7/logging/__init__.py,第1258行,_log
self.handle(record)
文件/ usr / lib / python2 7 / logging / __ init__.py,第1268行,处理
self.callHandlers(record)
文件/usr/lib/python2.7/logging/__init__.py,第1308行, callHandlers
hdlr.handle(record)
文件/usr/lib/python2.7/logging/__init__.py,第748行,处理
self.emit(record)
文件/usr/lib/python2.7/logging/handlers.py,第791行,发出
msg = self.format(record)+'\000'
文件/ usr / lib / python2.7 / logging / __ init__.py,行723,格式为
return fmt.format(record)
文件/usr/lib/python2.7/logging/__init__。 py,第467行rmat
s = self._fmt%record .__ dict__
KeyError:'xyz'
Syslog:
Jul 30 14:56:27 localhost 2012-07-30 14:56:27,131 [警告]警察警报!火!
PS:有一点背景,我正在使用线程编写一个进程,我想在以下方式:
[app-thread1]
[app-thread2]
...
解决方案
您可以使用例如
logger.error %s','args',exc_info = 1,extra = {...})
as you might know the python logging module supports the definition of *kwargs to customize log entries. This appears to be not supported for logging exceptions.
My Question: Is there an easy way to use custom kwargs with logging.exception?
A minimal example follows:
import logging
import logging.handlers
def create_logger():
""" initialize logging using sys log
"""
logger = logging.getLogger()
form = '%(asctime)s [%(levelname)-8s] %(xyz)s %(message)s'
local_log_handler = logging.handlers.SysLogHandler(address='/dev/log')
formatter = logging.Formatter(form)
local_log_handler.setFormatter(formatter)
logger.addHandler(local_log_handler)
return logger
log = create_logger()
try:
raise AttributeError("whatever")
except:
log.warn('Alarm! Fire!', extra={'xyz':'POLICE'})
log.exception('')
Output:
Traceback (most recent call last):
File "logexample.py", line 27, in <module>
log.exception('')
File "/usr/lib/python2.7/logging/__init__.py", line 1172, in exception
self.error(msg, exc_info=1, *args)
File "/usr/lib/python2.7/logging/__init__.py", line 1166, in error
self._log(ERROR, msg, args, **kwargs)
File "/usr/lib/python2.7/logging/__init__.py", line 1258, in _log
self.handle(record)
File "/usr/lib/python2.7/logging/__init__.py", line 1268, in handle
self.callHandlers(record)
File "/usr/lib/python2.7/logging/__init__.py", line 1308, in callHandlers
hdlr.handle(record)
File "/usr/lib/python2.7/logging/__init__.py", line 748, in handle
self.emit(record)
File "/usr/lib/python2.7/logging/handlers.py", line 791, in emit
msg = self.format(record) + '\000'
File "/usr/lib/python2.7/logging/__init__.py", line 723, in format
return fmt.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 467, in format
s = self._fmt % record.__dict__
KeyError: 'xyz'
Syslog:
Jul 30 14:56:27 localhost 2012-07-30 14:56:27,131 [WARNING ] POLICE Alarm! Fire!
PS: A little background, I am writing a process with threading and I want to log information in the following manner:
[app-thread1] [app-thread2] ...
解决方案
You can just use e.g.
logger.error('Message with %s', 'args', exc_info=1, extra={...})
这篇关于Python:使用自定义* kwargs记录异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文