Python 2.x documentation的emit()
函数的SysLogHandler说:
记录已格式化,然后发送到syslog服务器。如果 异常信息存在,不会发送到服务器。
但是,当我尝试以下代码时:
import logging
from logging.handlers import SysLogHandler
rootlogger = logging.getLogger()
rootlogger.setLevel(logging.DEBUG)
syslogh = SysLogHandler('/dev/log')
rootlogger.addHandler(syslogh)
# to see what's happening too
consoleh = logging.StreamHandler()
rootlogger.addHandler(consoleh)
# this appears in the log
rootlogger.info('foobar')
try:
a = 42
a / 0
except ZeroDivisionError as e:
rootlogger.exception('myException!: {}'.format(e))
它会将以下内容写入syslog:
5月7日16:25:59 localhost foobar
5月7日16:25:54 localhost myException!:整数除法或模数 零#012Traceback(最近一次调用最后一次):#012文件“syslogonly.py”, 第16行,#012 a / 0#012ZeroDivisionError:整数 划分或模数为零
我在Debian wheezy系统上使用rsyslog 8.4.2。
另外,我知道多线有问题,但是这有关系吗?
答案 0 :(得分:1)
您没有致电Logger.emit()
。您正在调用Logger.exception()
,根据documentation,始终会在邮件中添加例外信息:
在此记录器上记录级别为ERROR的消息。参数被解释为debug(),除了没有检查任何传递的exc_info。始终将异常信息添加到日志记录消息中。只应从异常处理程序调用此方法。
我没有深入了解源代码以确定调用emit()
以及在什么情况下调用。