Python:使用自定义* kwargs记录异常 [英] Python: Logging exceptions with custom *kwargs

查看:311
本文介绍了Python:使用自定义* 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆