Я следил за несколькими ответами здесь, на SO безрезультатно.Как я могу регистрироваться из Python в syslog с помощью SysLogHandler или syslog в Mac OS X * и * Debian (7)
Я развиваюсь на Macbook (Yosemite), но наши тестовые/производственные коробки - это Debian 7 (с использованием rsyslog). Я пытаюсь выйти в syslog таким образом, который будет работать как локально, так и не.
Я попробовал использовать SysLogHandler
. Это работает на Mac:
import logging
import logging.handlers
import syslog
h = logging.handlers.SysLogHandler(address='/var/run/syslog', facility=syslog.LOG_LOCAL1)
h.ident = 'works_on_macs'
logger = logging.getLogger('i_am_a_lumberjack')
logger.addHandler(h)
logger.debug("And I don't care")
logger.info('There is a sale on today')
logger.warn('Do not touch the hot stove!')
logger.error('Sorry, times up')
logger.critical('That sure is an ugly tie')
Эти сообщения будут отображаться в моем системном журнале. Однако, когда я меняю address='/dev/log'
на Debian 7 ... без кубиков.
Еще:
import syslog
syslog.openlog(ident='im_a_lumberjack', facility=syslog.LOG_LOCAL1)
syslog.syslog(syslog.WARNING, 'Watch out!')
Работы по Debian 7, но не на Mac.
Мне очень хотелось бы получить одно решение для регистрации, которое работает на обеих платформах. Очевидно, что адрес будет другим, но я уже устанавливаю его в config.
Как я могу получить syslog, работающий как для Mac , так и Debian?
Edit:
Как дополнительной информации - я обнаружил, что мой SysLogHandler, кажется, может быть, не может быть с помощью объекта правильно (?). Сообщения являются быть подобраны системным журналом, но они собираются поймать-все, что заставляет меня поверить, что они не получают помечены LOG_LOCAL1
Если бы это было дело, кажется, были исправлены в коде питона: определение функции encodePriority (самость, объект, приоритет): если isinstance (объект, basestring): объект = self.facility_names [объект] ' – Chris