2015-05-07 2 views
1

documentation для emit() функции Python 2.x SysLogHandler говорит:Почему не Python войти в системный журнал исключений

The record is formatted, and then sent to the syslog server. If exception information is present, it is not sent to the server.

... почему? source не tell меня много. Я что-то пропустил?

Однако, когда я пытаюсь следующий код:

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)) 

Он написать следующее системного журнал:

May 7 16:25:59 localhost foobar
May 7 16:25:54 localhost myException!: integer division or modulo by zero#012Traceback (most recent call last):#012 File "syslogonly.py", line 16, in #012 a/0#012ZeroDivisionError: integer division or modulo by zero

Я использую Rsyslog 8.4.2 на хриплой системе Debian.

Кроме того, я знаю, что есть проблемы с многострочными, но это связано?

ответ

1

Вы не звоните Logger.emit(). Вы звоните Logger.exception(), которые в соответствии с documentation, всегда добавляет информацию исключение к сообщению:

Logs a message with level ERROR on this logger. The arguments are interpreted as for debug(), except that any passed exc_info is not inspected. Exception info is always added to the logging message. This method should only be called from an exception handler.

Я не нырять в исходный код, чтобы определить, что вызывает emit() и при каких обстоятельствах, однако.

+0

Хорошая точка. Однако я до сих пор не знаю, почему sysloghandler исключает ошибки журнала. Может быть, это ошибка в документах? – lorenzog