NAME
Sys::Syslog - Perl interface to the UNIX syslog(3) calls
VERSION
Version 0.17
SYNOPSIS
use Sys::Syslog; # all except setlogsock(), or:
use Sys::Syslog qw(:DEFAULT setlogsock); # default set, plus setlogsock()
use Sys::Syslog qw(:standard :macros); # standard functions, plus macros
setlogsock $sock_type;
openlog $ident, $logopt, $facility; # don't forget this
syslog $priority, $format, @args;
$oldmask = setlogmask $mask_priority;
closelog;
DESCRIPTION
Sys::Syslog is an interface to the UNIX syslog(3) program. Call syslog() with a string priority and a list of printf() args just like syslog(3).
EXPORTS
Sys::Syslog exports the following Exporter tags:
:standardexports the standardsyslog(3)functions:openlog closelog setlogmask syslog:extendedexports the Perl specific functions forsyslog(3):setlogsock:macrosexports the symbols corresponding to most of yoursyslog(3)macros and theLOG_UPTO()andLOG_MASK()functions. See "CONSTANTS" for the supported constants and their meaning.
By default, Sys::Syslog exports the symbols from the :standard tag.
FUNCTIONS
- openlog($ident, $logopt, $facility)
-
Opens the syslog.
$identis prepended to every message.$logoptcontains zero or more of the options detailed below.$facilityspecifies the part of the system to report about, for exampleLOG_USERorLOG_LOCAL0: see "Facilities" for a list of well-known facilities, and yoursyslog(3)documentation for the facilities available in your system. Check "SEE ALSO" for useful links. Facility can be given as a string or a numeric macro.This function will croak if it can't connect to the syslog daemon.
Note that
openlog()now takes three arguments, just likeopenlog(3).You should use
openlog()before callingsyslog().Options
cons- This option is ignored, since the failover mechanism will drop down to the console automatically if all other media fail.ndelay- Open the connection immediately (normally, the connection is opened when the first message is logged).nofatal- When set to true,openlog()andsyslog()will only emit warnings instead of dying if the connection to the syslog can't be established.nowait- 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.)pid- Include PID with each message.
Examples
Open the syslog with options
ndelayandpid, and with facilityLOCAL0:openlog($name, "ndelay,pid", "local0");Same thing, but this time using the macro corresponding to
LOCAL0:openlog($name, "ndelay,pid", LOG_LOCAL0); - syslog($priority, $message)
- syslog($priority, $format, @args)
-
If
$prioritypermits, logs$messageorsprintf($format, @args)with the addition that%min $message or$formatis replaced with"$!"(the latest error message).$prioritycan specify a level, or a level and a facility. Levels and facilities can be given as strings or as macros.If you didn't use
openlog()before usingsyslog(),syslog()will try to guess the$identby extracting the shortest prefix of$formatthat ends in a":".Examples
syslog("info", $message); # informational level syslog(LOG_INFO, $message); # informational level syslog("info|local0", $message); # information level, Local0 facility syslog(LOG_INFO|LOG_LOCAL0, $message); # information level, Local0 facility- Note
-
Sys::Syslogversion v0.07 and older passed the$messageas the formatting string tosprintf()even when no formatting arguments were provided. If the code callingsyslog()might execute with older versions of this module, make sure to call the function assyslog($priority, "%s", $message)instead ofsyslog($priority, $message). This protects against hostile formatting sequences that might show up if $message contains tainted data.
- setlogmask($mask_priority)
-
Sets the log mask for the current process to
$mask_priorityand returns the old mask. If the mask argument is 0, the current log mask is not modified. See "Levels" for the list of available levels. You can use theLOG_UPTO()function to allow all levels up to a given priority (but it only accept the numeric macros as arguments).Examples
Only log errors:
setlogmask( LOG_MASK(LOG_ERR) );Log everything except informational messages:
setlogmask( ~(LOG_MASK(LOG_INFO)) );Log critical messages, errors and warnings:
setlogmask( LOG_MASK(LOG_CRIT) | LOG_MASK(LOG_ERR) | LOG_MASK(LOG_WARNING) );Log all messages up to debug:
setlogmask( LOG_UPTO(LOG_DEBUG) ); - setlogsock($sock_type)
- setlogsock($sock_type, $stream_location) (added in 5.004_02)
-
Sets the socket type to be used for the next call to
openlog()orsyslog()and returns true on success,undefon failure. The available mechanisms are:"native"- use the native C functions from yoursyslog(3)library."tcp"- connect to a TCP socket, on thesyslog/tcporsyslogng/tcpservice."udp"- connect to a UDP socket, on thesyslog/udpservice."inet"- connect to an INET socket, either TCP or UDP, tried in that order."unix"- connect to a UNIX domain socket (in some systems a character special device). The name of that socket is the second parameter or, if you omit the second parameter, the value returned by the_PATH_LOGmacro (if your system defines it), or /dev/log or /dev/conslog, whatever is writable."stream"- connect to the stream indicated by the pathname provided as the optional second parameter, or, if omitted, to /dev/conslog. For example Solaris and IRIX system may prefer"stream"instead of"unix"."console"- send messages directly to the console, as for the"cons"option ofopenlog().
A reference to an array can also be passed as the first parameter. When this calling method is used, the array should contain a list of mechanisms which are attempted in order.
The default is to try
native,tcp,udp,unix,stream,console.Giving an invalid value for
$sock_typewill croak.Examples
Select the UDP socket mechanism:
setlogsock("udp");Select the native, UDP socket then UNIX domain socket mechanisms:
setlogsock(["native", "udp", "unix"]); - closelog()
-
Closes the log file and returns true on success.
EXAMPLES
openlog($program, 'cons,pid', 'user');
syslog('info', '%s', 'this is another test');
syslog('mail|warning', 'this is a better test: %d', time);
closelog();
syslog('debug', 'this is the last test');
setlogsock('unix');
openlog("$program $$", 'ndelay', 'user');
syslog('notice', 'fooprogram: this is really done');
setlogsock('inet');
$! = 55;
syslog('info', 'problem was %m'); # %m == $! in syslog(3)
Log to UDP port on $remotehost instead of logging locally:
setlogsock('udp');
$Sys::Syslog::host = $remotehost;
openlog($program, 'ndelay', 'user');
syslog('info', 'something happened over here');
CONSTANTS
Facilities
LOG_AUTH- security/authorization messagesLOG_AUTHPRIV- security/authorization messages (private)LOG_CRON- clock daemons (cron and at)LOG_DAEMON- system daemons without separate facility valueLOG_FTP- FTP daemonLOG_KERN- kernel messagesLOG_INSTALL- installer subsystemLOG_LAUNCHD- launchd - general bootstrap daemon (Mac OS X)LOG_LOCAL0throughLOG_LOCAL7- reserved for local useLOG_LPR- line printer subsystemLOG_MAIL- mail subsystemLOG_NETINFO- NetInfo subsystem (Mac OS X)LOG_NEWS- USENET news subsystemLOG_RAS- Remote Access Service (VPN / PPP) (Mac OS X)LOG_REMOTEAUTH- remote authentication/authorization (Mac OS X)LOG_SYSLOG- messages generated internally by syslogdLOG_USER(default) - generic user-level messagesLOG_UUCP- UUCP subsystem
Levels
LOG_EMERG- system is unusableLOG_ALERT- action must be taken immediatelyLOG_CRIT- critical conditionsLOG_ERR- error conditionsLOG_WARNING- warning conditionsLOG_NOTICE- normal, but significant, conditionLOG_INFO- informational messageLOG_DEBUG- debug-level message
DIAGNOSTICS
- Invalid argument passed to setlogsock
-
(F) You gave
setlogsock()an invalid value for$sock_type. - no connection to syslog available
-
(F)
syslog()failed to connect to the specified socket. - stream passed to setlogsock, but %s is not writable
-
(W) You asked
setlogsock()to use a stream socket, but the given path is not writable. - stream passed to setlogsock, but could not find any device
-
(W) You asked
setlogsock()to use a stream socket, but didn't provide a path, andSys::Syslogwas unable to find an appropriate one. -
(W) You asked
setlogsock()to use a TCP socket, but the service is not available on the system. - syslog: expecting argument %s
-
(F) You forgot to give
syslog()the indicated argument. - syslog: invalid level/facility: %s
-
(F) You specified an invalid level or facility.
- syslog: too many levels given: %s
-
(F) You specified too many levels.
- syslog: too many facilities given: %s
-
(F) You specified too many facilities.
- syslog: level must be given
-
(F) You forgot to specify a level.
-
(W) You asked
setlogsock()to use a UDP socket, but the service is not available on the system. - unix passed to setlogsock, but path not available
-
(W) You asked
setlogsock()to use a UNIX socket, butSys::Syslogwas unable to find an appropriate an appropriate device.
SEE ALSO
SUSv3 issue 6, IEEE Std 1003.1, 2004 edition, http://www.opengroup.org/onlinepubs/000095399/basedefs/syslog.h.html
GNU C Library documentation on syslog, http://www.gnu.org/software/libc/manual/html_node/Syslog.html
Solaris 10 documentation on syslog, http://docs.sun.com/app/docs/doc/816-5168/6mbb3hruo?a=view
AIX 5L 5.3 documentation on syslog, http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.doc/libs/basetrf2/syslog.htm
HP-UX 11i documentation on syslog, http://docs.hp.com/en/B9106-90010/syslog.3C.html
Tru64 5.1 documentation on syslog, http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51_HTML/MAN/MAN3/0193____.HTM
Stratus VOS 15.1, http://stratadoc.stratus.com/vos/15.1.1/r502-01/wwhelp/wwhimpl/js/html/wwhelp.htm?context=r502-01&file=ch5r502-01bi.html
RFC 3164 - The BSD syslog Protocol, http://www.faqs.org/rfcs/rfc3164.html -- Please note that this is an informational RFC, and therefore does not specify a standard of any kind.
RFC 3195 - Reliable Delivery for syslog, http://www.faqs.org/rfcs/rfc3195.html
Syslogging with Perl, http://lexington.pm.org/meetings/022001.html
AUTHORS
Tom Christiansen <tchrist@perl.com> and Larry Wall <larry@wall.org>.
UNIX domain sockets added by Sean Robinson <robinson_s@sc.maricopa.edu> with support from Tim Bunce <Tim.Bunce@ig.co.uk> and the perl5-porters mailing list.
Dependency on syslog.ph replaced with XS code by Tom Hughes <tom@compton.nu>.
Code for constant()s regenerated by Nicholas Clark <nick@ccl4.org>.
Failover to different communication modes by Nick Williams <Nick.Williams@morganstanley.com>.
XS code for using native C functions borrowed from Unix::Syslog, written by Marcus Harnisch <marcus.harnisch@gmx.net>.
Extracted from core distribution for publishing on the CPAN by Sébastien Aperghis-Tramoni <sebastien@aperghis.net>.
BUGS
Please report any bugs or feature requests to bug-sys-syslog at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Sys-Syslog. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Sys::Syslog
You can also look for information at:
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
RT: CPAN's request tracker
Search CPAN
Kobes' CPAN Search
Perl Documentation
LICENSE
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.