Logging Python:使用自定义*kwargs记录异常
正如您可能知道的,python日志模块支持自定义日志条目。这似乎是不支持的 我的问题:有没有一种简单的方法可以将自定义kwargs与logging.exception一起使用 下面是一个简单的例子:Logging Python:使用自定义*kwargs记录异常,logging,exception-handling,python-2.7,Logging,Exception Handling,Python 2.7,正如您可能知道的,python日志模块支持自定义日志条目。这似乎是不支持的 我的问题:有没有一种简单的方法可以将自定义kwargs与logging.exception一起使用 下面是一个简单的例子: import logging import logging.handlers def create_logger(): """ initialize logging using sys log """ logger = logging.getLogger()
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('')
输出:
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'
PS:一点背景知识,我正在编写一个带有线程的进程,我希望以以下方式记录信息:
[应用程序-1]
[应用程序2]
…你可以用
logger.error('Message with %s', 'args', exc_info=1, extra={...})
你确定这样行吗?我将log.exception替换为以下行:log.error(“a%s”,['sth'],exc_info=1,extra={'xyz':'POLICE'}),但它不会出现在日志中。我有两个小错误:1。”用某物代替[某物]2。错误的日志级别在vinay sajip附近做得很好。为什么决定logger.exception不接受额外数据?这看起来不像是意外遗漏。@Alex:这是意外遗漏。现在已更正-如果查看
exception()
的源代码,您将看到它使用msg
、*args
和exc_info=1
调用error()
。事实上,你可以在上面的回溯中看到这一点。
logger.error('Message with %s', 'args', exc_info=1, extra={...})