1# The client sends messages with different facility and severity. 2# The syslogd writes into multiple files depending on priority. 3# The syslogd writes it into a file and through a pipe. 4# The syslogd passes it via UDP to the loghost. 5# The server receives the message on its UDP socket. 6# Find the message in client, file, pipe, syslogd, server log. 7# Check that the messages appear in the correct log files. 8 9use strict; 10use warnings; 11use Sys::Syslog; 12 13my (@messages, @priorities); 14foreach my $fac (qw(local5 local6 local7)) { 15 foreach my $sev (qw(notice warning err)) { 16 my $msg = "$fac.$sev"; 17 push @messages, $msg; 18 no strict 'refs'; 19 my $prio = ("Sys::Syslog::LOG_".uc($fac))->() | 20 ("Sys::Syslog::LOG_".uc($sev))->(); 21 push @priorities, $prio; 22 } 23} 24 25my %selector2messages = ( 26 "*.*" => [@messages], 27 "*.info" => [@messages], 28 "*.notice" => [@messages], 29 "*.warning" => [ grep { /\.(warning|err)$/ } @messages], 30 "*.err" => [ grep { /\.err$/ } @messages], 31 "*.crit" => [], 32 "*.none" => [], 33 "local5.*" => [qw(local5.notice local5.warning local5.err)], 34 "local5.info" => [qw(local5.notice local5.warning local5.err)], 35 "local5.notice" => [qw(local5.notice local5.warning local5.err)], 36 "local5.warning" => [qw(local5.warning local5.err)], 37 "local5.err" => [qw(local5.err)], 38 "local5.crit" => [], 39 "local5.none" => [], 40 "local5.warning;local5.err" => [qw(local5.err)], 41 "local5.err;local5.warning" => [qw(local5.warning local5.err)], 42 "local6.warning;local7.err" => [qw(local6.warning local6.err local7.err)], 43 "local6.err;local7.err" => [qw(local6.err local7.err)], 44 "local6,local7.err" => [qw(local6.err local7.err)], 45 "local6,local7.warning;local6.err" => [qw(local6.err local7.warning 46 local7.err)], 47 "*.*;local6,local7.none" => [qw(local5.notice local5.warning local5.err)], 48); 49 50our %args = ( 51 client => { 52 func => sub { 53 my $self = shift; 54 for (my $i = 0; $i < @messages; $i++) { 55 syslog($priorities[$i], $messages[$i]); 56 } 57 write_log($self); 58 }, 59 }, 60 syslogd => { 61 conf => selector2config(%selector2messages), 62 }, 63 multifile => [ 64 (map { { loggrep => $_ } } (selector2loggrep(%selector2messages))), 65 ], 66 server => { 67 loggrep => { map { qr/ <$_>/ => 1 } @priorities }, 68 }, 69 file => { 70 loggrep => { map { qr/: $_$/ => 1 } @messages }, 71 }, 72); 73 741; 75