HeliosX::Logger::Syslog - Helios::Logger subclass implementing logging to syslogd for Helios
# in helios.ini loggers=HeliosX::Logger::Syslog # (optional) specific a syslog facility (defaults to 'user') syslog_facility=local1 # (optional) you can set other syslog options as necessary syslog_options=nofatal,pid # (optional) you can set the logmask by using mask values # 127 will filter out LOG_DEBUG msgs but log everything else syslog_logmask=127 # (optional) you can also set a threshold (doesn't pass the message to syslog) # 3 will log errors and worse, but filter out warnings, notices, etc syslog_priority_threshold=3
This class implments a Helios::Logger subclass to provide Helios applications the ability to log messages to syslogd.
The syslogd facility to which to log messages. If not specified, it will default to 'user'.
A comma-delimited list of syslog options. This will be passed as the second parameter of openlog(). These options include (from the Sys::Syslog manpage):
When set to true, "openlog()" and "syslog()" will only emit warnings instead of dying if the connection to the syslog can't be established.
Don't wait for child processes that may have been created while logging the message. (The GNU C library does not create a child process, so this option has no effect on Linux.)
Write the message to standard error output as well to the system log.
Include PID with each message.
See the Sys::Syslog manpage for more details.
Allows you choose which log priorities you want to syslogd to actually log. This is like the Helios internal log_priority_threshold, but more capable as you can pick and choose which priorities you want, rather than just a range.
Syslogd defines the mask values for priorities as:
1 = LOG_EMERG 2 = LOG_ALERT 4 = LOG_CRIT 8 = LOG_ERR 16 = LOG_WARNING 32 = LOG_NOTICE 64 = LOG_INFO 128 = LOG_DEBUG
So, for example, if you wanted to log everything except LOG_DEBUG messages, putting:
in your helios.ini or Ctrl Panel will cause syslogd to filter out messages of LOG_DEBUG priority. In addition, to only log LOG_ERR and LOG_WARNING messages:
will filter out any messages not of LOG_ERR or LOG_WARNING priority (8 + 16 = 24).
Just like log_priority_threshold, but for syslogd. If you just want to log messages of a certain priority or higher, you can set a numeric value for syslog_priority_threshold and any log messages of a higher value (lower priority) will be discarded. The priority levels are defined in Helios::LogEntry::Levels (which happen to match syslogd's):
Helios::LogEntry::Levels numeric values LOG_EMERG 0 LOG_ALERT 1 LOG_CRIT 2 LOG_ERR 3 LOG_WARNING 4 LOG_NOTICE 5 LOG_INFO 6 LOG_DEBUG 7
So if you want to discard LOG_DEBUG-level messages but log everything else, adding a line like
to your helios.ini or Ctrl Panel will discard LOG_DEBUG-level messages but log everything else.
The syslog_priority_threshold configuration option is implemented at the Perl level, so if your syslogd-based system is experiencing high load, you can use it instead of syslog_logmask to reduce demand on your logging system.
It should be noted that although log_priority_threshold and syslog_priority_threshold work in exactly the same way, they are in fact completely independent. The log_priority_threshold config option only affects the internal Helios logging system (Helios::Logger::Internal), while syslog_priority_threshold only affects HeliosX::Logger::Syslog.
The init() method is empty.
The logMsg() method logs the given message to the configured syslog_facility with the configured syslog_options and the given $priority_level.
Given the information passed to logMsg(), assembleMsg() returns the actual text string to be logged to syslogd. Separating this step into its own method allows you to easily override the default message format if you so choose. Simply subclass HeliosX::Logger::Syslog and override assembleMsg() with your own message formatting method.
Andrew Johnson, <lajandy at cpan dotorg>
COPYRIGHT AND LICENSE
Copyright (C) 2009-12 by Andrew Johnson.
This library is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0.
This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.
This software comes with no warranty of any kind.