9.33. Writing Log Entries via Perl
Problem
You want to add information to the system log from a Perl program.
Solution
Use the Perl
module
Sys::Syslog
, which implements the API described
in the sidebar, The syslog API.
syslog-demo.pl #!/usr/bin/perl use Sys::Syslog qw(:DEFAULT setlogsock); use File::Basename; my $count = 0; my $host = "some-machine"; setlogsock("unix"); openlog(basename($0), "pid", "local3"); syslog("warning", "%d connections from %s", $count, $host); syslog("authpriv|err", "intruder alert!"); syslog("err", "can't open configuration file: %m"); closelog( );
Discussion
The system logger by default refuses to accept
network
connections (assuming you have not used the syslogd
-r option). Unfortunately, the Perl module uses network
connections by default, so our recipe calls
setlogsock
to force the use of a local
socket instead. If your syslog
messages seem to
be disappearing into thin air, be sure to use
setlogsock
. Recent versions of
Sys::Syslog
resort to a local socket if the
network connection fails, but use of setlogsock
for reliable operation is a good idea, since the local socket should
always work. Note that setlogsock
must be
explicitly imported.
Perl scripts can pass the %m
format specifier to
syslog
to include system error messages, as an
alternative to interpolating the $!
variable. Be
sure to use %m
(or $!
) only
when a system error has occurred, to avoid misleading messages.
See Also
Sys::Syslog(3pm), syslog(3).
Get Linux Security Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.