The syslog2 package provides a syslog2.SysLogHandler class that has some improvements over the standard Python logging.handlers.SysLogHandler class:
- It supports a new value "local" for the address init parameter that automatically does the right thing for logging to the local system log, without requiring additional syslog demons or the like (other than what is built in to the operating system).
- When a syslog target is used, it supports the log formats defined in RFC3164 and RFC5424 via a new new optional init parameter format.
- It supports placing a program name into the log record via a new optional init parameter program.
- It supports adding a 0x00 Byte at the end of the log message for compatibility with older syslog environments, via a new optional init parameter append_nul that defaults to adding the Byte. This was previously an undocumented class attribute (with the same default).
- The previously undocumented class attribute facility_names is now officially available for callers to determine valid Syslog facility names and to map them to facility codes.
- A new class attribute severity_names has been added for callers to determine valid Syslog severity names and to map them to severity codes.
- The reachability of the targeted system log is verified already during creation of the SysLogHandler object, and not only when logging a message like the standard Python SysLogHandler class does. Issues with the system log are raised through a new syslog2.SysLogTargetError exception.
The new SysLogHandler class is mostly backwards compatible with the standard Python SysLogHandler. There are some incompatibilities, though:
- The undocumented class attribute append_nul has been removed. This feature is now available as a new optional init parameter append_nul.
- The undocumented class attributes priority_map and priority_names have been removed or made private.
- The new SysLogTargetError exception needs to be handled.
Migration to use the new SysLogHandler class is easy as long as you did not use any of the undocumented features:
Old code:
from logging.handlers import SysLogHandler
# ... use it
New code:
from syslog2 import SysLogHandler
# ... use it
To install the latest released version of the syslog2 package into your active Python environment:
$ pip install syslog2
This will also install any prerequisite Python packages.
For more details and alternative ways to install, see Installation.
For information on how to contribute to the syslog2 project, see Contributing.
The syslog2 project is provided under the Apache Software License 2.0.