SysLogHandler not writing to syslog with Python logging
SysLogHandler not writing to syslog with Python logging
1 January 2008Logging to syslog in Python
I was trying to use the standard Python
loggingmodule to write messages to syslog. Theloggingmodule has aSysLogHandlerclass which can log to a local or remote syslog daemon.With no host specified,
SysLogHandleruseslocalhostwhich is what I wanted. I tried to useSysLogHandler,but it just wouldn’t work. There was no error when I called the logging methods, but my messages didn’t show up in/var/log/syslog.syslog module works
Python also has a standard
syslogmodule. I tried it and it worked fine; my messages were written to the syslog file.For example:
import syslog syslog.syslog('test')syslogd isn’t listening
After running Wireshark I found the
SysLogHandlerwas correctly sending a UDP packet tolocalhoston port 514. I could also see there was an ICMP response indicating the UDP packet was not received on that port. syslog wasn’t listening!Use /dev/log
Instead of sending to
localhost, I wantedSysLogHandlerto pass the message to syslog on the local machine in the same way thesyslogPython module was doing.The solution is to pass
/dev/logas theaddressparameter toSysLogHandler. It’s not well documented, but it works.For example:
import logging from logging.handlers import SysLogHandler logger = logging.getLogger() logger.setLevel(logging.INFO) syslog = SysLogHandler(address='/dev/log') formatter = logging.Formatter('%(name)s: %(levelname)s %(message)s') syslog.setFormatter(formatter) logger.addHandler(syslog)Easy when you know how.
浙公网安备 33010602011771号