2013-10-02 3 views
4

Я пытаюсь настроить приложение Python для входа в/var/log/messages с использованием стандартного Linux syslogger. Однако, когда я пытаюсь создать обработчик syslog, я получаю ошибку socket.error: [Errno 111] Connection refused.Python SysLogHandler не работает: socket.error 'Connection reject'

>>> import logging 
>>> import logging.handlers 
>>> logger = logging.getLogger("my_logger") 
>>> logger.setLevel(logging.DEBUG) 
>>> handler = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON, address="/var/log/messages") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.6/logging/handlers.py", line 715, in __init__ 
    self._connect_unixsocket(address) 
    File "/usr/lib64/python2.6/logging/handlers.py", line 731, in _connect_unixsocket 
    self.socket.connect(address) 
    File "<string>", line 1, in connect 
socket.error: [Errno 111] Connection refused 

/etc/rsyslog.conf конфигурируются с помощью следующей строки:

kern.notice;*.err;local0.info;mail.none;authpriv.none;cron.none;local1.none;daemon.notice /var/log/messages 

Я предполагаю, что проблема находится где-то в конфигурации системного журнала, но, насколько я могу видеть, я ве сделали правильные вещи:

  • Я пытаюсь создать Python SysLogHandler, и рассказывающий его, какой файл использовать
  • Я говорю SysLogHandler использовать DAEMON FACI Лити
  • rsyslog.conf настроен на отправку журналов демона в/вар/Журнал/сообщений (наряду с другими бревнами)

Есть ли что-то еще, что я должен делать, чтобы сделать эту работу?

Раньше я просто использовал logging.FileHandler, но это не работает должным образом, как когда файл сообщений обертывается, Python продолжает запись в старый файл.

ответ

6

Необходимо указать фактический сокет домена unix, а не файл журнала. Python docs

Попробуйте это:

import logging 
import logging.handlers 
logger = logging.getLogger("my_logger") 
logger.setLevel(logging.DEBUG) 
handler = logging.handlers.SysLogHandler(
    facility=logging.handlers.SysLogHandler.LOG_DAEMON, address="/dev/log") 
+0

Awesome, спасибо. Я не понимал, что означают документы, когда они сказали, что «адрес, который вы должны использовать для сокета домена» - теперь имеет смысл. Благодаря! – sam

Смежные вопросы