Подтвердить что ты не робот

Syslog.syslog vs SysLogHandler

Я смотрю, как войти в syslog из моего приложения Python, и я обнаружил, что есть два способа сделать это:

Какой вариант лучше всего использовать, преимущества/недостатки каждого из них и т.д., потому что я действительно не знаю, какой из них я должен использовать.

4b9b3361

Ответ 1

syslog.syslog() может использоваться только для отправки сообщений локальному syslogd. SysLogHandler может использоваться как часть комплексной настраиваемой подсистемы ведения журнала и может регистрироваться на удаленных машинах.

Ответ 2

Модуль протоколирования - это более комплексное решение, которое потенциально может обрабатывать все ваши сообщения журнала и является очень гибким. Например, вы можете настроить несколько обработчиков для вашего регистратора, и каждый из них может быть настроен на запись на другом уровне. У вас может быть SysLogHandler для отправки ошибок в syslog и FileHandler для отладки журналов и SMTPHandler для отправки по электронной почте действительно важных сообщений в операционные системы. Вы также можете определить иерархию регистраторов в своих модулях, и каждый из них имеет свой собственный уровень, чтобы вы могли включать/отключать сообщения от определенных модулей, например:

import logging
logger = logging.getLogger('package.stable_module')
logger.setLevel(logging.WARNING)

И в другом модуле:

import logging
logger = logging.getLogger('package.buggy_module')
logger.setLevel(logging.DEBUG)

Сообщения журнала в обоих этих модулях будут отправляться, в зависимости от уровня, в регистратор пакетов и, в конечном счете, с обработчиками, которые вы определили. Вы также можете добавить обработчики непосредственно в регистраторы модулей и так далее. Если вы следовали за этим и все еще заинтересованы, я рекомендую перейти к регистрации tutorial для более подробной информации.

Ответ 3

До сих пор в logging.handlers.SysLogHander есть недостаток, о котором еще не сказано. То есть я не могу установить такие параметры, как LOG_ODELAY или LOG_NOWAIT или LOG_PID. С другой стороны, LOG_CONS и LOG_PERROR могут быть достигнуты с добавлением большего количества обработчиков, а LOG_NDELAY уже установлено по умолчанию, поскольку соединение открывается при создании экземпляра обработчика.