Ответ 1
syslog.syslog()
может использоваться только для отправки сообщений локальному syslogd. SysLogHandler
может использоваться как часть комплексной настраиваемой подсистемы ведения журнала и может регистрироваться на удаленных машинах.
Я смотрю, как войти в syslog из моего приложения Python, и я обнаружил, что есть два способа сделать это:
Какой вариант лучше всего использовать, преимущества/недостатки каждого из них и т.д., потому что я действительно не знаю, какой из них я должен использовать.
syslog.syslog()
может использоваться только для отправки сообщений локальному syslogd. SysLogHandler
может использоваться как часть комплексной настраиваемой подсистемы ведения журнала и может регистрироваться на удаленных машинах.
Модуль протоколирования - это более комплексное решение, которое потенциально может обрабатывать все ваши сообщения журнала и является очень гибким. Например, вы можете настроить несколько обработчиков для вашего регистратора, и каждый из них может быть настроен на запись на другом уровне. У вас может быть 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 для более подробной информации.
До сих пор в logging.handlers.SysLogHander
есть недостаток, о котором еще не сказано. То есть я не могу установить такие параметры, как LOG_ODELAY
или LOG_NOWAIT
или LOG_PID
. С другой стороны, LOG_CONS
и LOG_PERROR
могут быть достигнуты с добавлением большего количества обработчиков, а LOG_NDELAY
уже установлено по умолчанию, поскольку соединение открывается при создании экземпляра обработчика.