Commit | Line | Data |
---|---|---|
bf485d3d WD |
1 | #!/usr/bin/perl |
2 | # Output rsyncd log messages for a single module. The log file can be in | |
3 | # either syslog format or rsync's own log-file format. | |
4 | ||
5 | use strict; | |
6 | ||
7 | my $match = shift; | |
8 | die "Usage: logfilter MODULE_NAME [LOGFILE ...]\n" unless defined $match; | |
9 | ||
10 | my $syslog_prefix = '\w\w\w +\d+ \d\d:\d\d:\d\d \S+ rsyncd'; | |
11 | my $rsyncd_prefix = '\d\d\d\d/\d\d/\d\d \d\d:\d\d:\d\d '; | |
12 | ||
13 | my %pids; | |
14 | ||
15 | while (<>) { | |
16 | my($pid,$msg) = /^(?:$syslog_prefix|$rsyncd_prefix)\[(\d+)\]:? (.*)/o; | |
17 | next unless defined $pid; | |
18 | my($mod_spec) = $msg =~ /^rsync (?:on|to) (\S+) from /; | |
19 | if (defined $mod_spec) { | |
20 | if ($mod_spec =~ /^$match(\/\S*)?$/o) { | |
21 | $pids{$pid} = 1; | |
22 | } else { | |
23 | delete $pids{$pid}; | |
24 | } | |
25 | } | |
26 | next unless $pids{$pid}; | |
27 | print $_; | |
28 | } |