Net::Syslogd - Perl implementation of Syslog Listener
use Net::Syslogd; my $syslogd = Net::Syslogd->new() or die "Error creating Syslogd listener: %s", Net::Syslogd->error; while (1) { my $message; if (!($message = $syslogd->get_message())) { next } if (!(defined($message->process_message()))) { printf "$0: %s\n", Net::Syslogd->error } else { printf "%s\t%i\t%s\t%s\t%s\t%s\t%s\n", $message->peeraddr, $message->peerport, $message->facility, $message->severity, $message->time, $message->hostname, $message->message } }
Net::Syslogd is a class implementing a simple Syslog listener in Perl. Net::Syslogd will accept messages on the default Syslog port (UDP 514) and attempt to decode them according to RFC 3164.
my $syslogd = new Net::Syslogd([OPTIONS]);
or
my $syslogd = Net::Syslogd->new([OPTIONS]);
Create a new Net::Syslogd object with OPTIONS as optional parameters. Valid options are:
Option Description Default ------ ----------- ------- -LocalAddr Interface to bind to any -LocalPort Port to bind server to 514 -Timeout Timeout in seconds to wait for request 10
$syslogd->get_message();
Listen for a Syslog message. Timeout after default or user specified timeout set in new method and return '0'; else, return is defined.
new
$syslogd->process_message();
Process a received Syslog message by RFC 3164 - or as close as possible. RFC 3164 format is as follows:
<###>Mmm dd hh:mm:ss hostname tag msg |___||_____________| | Time Priority
NOTE: This script parses the tag and msg as a single field.
Allows the following methods to be called.
$syslogd->datagram();
Return the raw datagram received from a processed (process_message()) Syslog message.
process_message()
$syslogd->peeraddr();
Return peer address value from a received and processed (process_message()) Syslog message. This is the address from the IP header on the UDP datagram.
$syslogd->peerport();
Return peer port value from a received and processed (process_message()) Syslog message. This is the port from the IP header on the UDP datagram.
$syslogd->priority();
Return priority value from a received and processed (process_message()) Syslog message. This is the raw priority number not decoded into facility and severity.
$syslogd->facility([1]);
Return facility value from a received and processed (process_message()) Syslog message. This is the text representation of the facility. For the raw number, use the optional boolean argument.
$syslogd->severity([1]);
Return severity value from a received and processed (process_message()) Syslog message. This is the text representation of the severity. For the raw number, use the optional boolean argument.
$syslogd->time();
Return time value from a received and processed (process_message()) Syslog message.
$syslogd->hostname();
Return hostname value from a received and processed (process_message()) Syslog message.
$syslogd->message();
Return message value from a received and processed (process_message()) Syslog message. Note this is the tag and msg field from a properly formatted RFC 3164 Syslog message.
printf "Error: %s\n", $Net::Syslogd->error;
Return last error.
None by default.
This example implements a simple Syslog server that listens on the default port and prints received messages to the console.
use Net::Syslogd; my $syslogd = Net::Syslogd->new() or die "Error creating Syslogd listener: %s", Net::Syslogd->error; while (1) { my $message; if (!($message = $syslogd->get_message())) { next } my $pid = fork(); if (!defined($pid)) { print "fork() Error!\n"; exit } elsif ($pid == 0) { if (!(defined($message->process_message()))) { printf "$0: %s\n", Net::Syslogd->error } else { printf "%s\t%i\t%s\t%s\t%s\t%s\t%s\n", $message->peeraddr, $message->peerport, $message->facility, $message->severity, $message->time, $message->hostname, $message->message } exit } else { # parent } }
This software is released under the same terms as Perl itself. If you don't know what that means visit http://perl.com/.
Copyright (C) Michael Vincent 2010
http://www.VinsWorld.com
All rights reserved
To install Net::Syslogd, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Net::Syslogd
CPAN shell
perl -MCPAN -e shell install Net::Syslogd
For more information on module installation, please visit the detailed CPAN module installation guide.