diff --git a/logwatch-journal.patch b/logwatch-journal.patch new file mode 100644 index 0000000..a51c99e --- /dev/null +++ b/logwatch-journal.patch @@ -0,0 +1,95 @@ +commit 23e714ad43285d59c5b5852ef2c6013593d64671 +Author: bjorn +Date: Sun May 15 13:49:08 2016 -0700 + + [journalctl] Added shared script contributed by Mark Grimes. + +diff --git a/scripts/shared/journalctl b/scripts/shared/journalctl +new file mode 100755 +index 0000000..1627fd4 +--- /dev/null ++++ b/scripts/shared/journalctl +@@ -0,0 +1,83 @@ ++#!/usr/bin/perl ++# ++# The purpose of this script is to pass the output of the journalctl ++# command to the logwatch parsers. The corresponding conf/logfile ++# can be simple. The following example shows a logfile with two lines: ++# LogFile = /dev/null ++# *JournalCtl = "--output=cat --unit=service_name.service" ++# ++# In the example above, the arguments to the JournalCtl command are ++# passed to the journalctl system command. It is advised to delimit ++# the arguments in double quotes to preserve mixed case, if ++# applicable. ++ ++use strict; ++use warnings; ++ ++eval "use Date::Manip"; ++my $hasDM = $@ ? 0 : 1; ++ ++# logwatch passes arguments as one string delimited by single quotes ++my @args = split(" ", $ARGV[0]); ++my @range = get_range( $ENV{LOGWATCH_DATE_RANGE} ); ++ ++my $Debug = $ENV{'LOGWATCH_DEBUG'} || 0; ++ ++if ($Debug > 5) { ++ warn join " ", 'journalctl', @args, @range, "\n"; ++} ++ ++system( 'journalctl', @args, @range ); ++ ++sub get_range { ++ my $range = lc( shift || 'all' ); ++ my @range; ++ ++ if ( !$range || $range eq 'all' ) { ++ @range = (); ++ } elsif ( $range eq 'yesterday' ) { ++ push @range, '--since', 'yesterday', '--until', 'today'; ++ } elsif ( $range eq 'today' ) { ++ push @range, '--since', 'today', '--until', 'tomorrow'; ++ } elsif ($hasDM) { ++ ++ # Strip off any period ++ $range =~ ++ s/for\s+(?:those|that|this)\s+((year|month|day|hour|minute|second)s?)\s*$//; ++ ++ # Look for between x and y ++ my ( $range1, $range2 ) = ++ ( $range =~ /^between\s+(.*)\s+and\s+(.*)\s*$/ ); ++ ++ # Look for since x ++ if ( $range =~ /^\s*since\s+/ ) { ++ ($range1) = ( $range =~ /\s*since\s+(.*)/ ); ++ $range2 = "now"; ++ } ++ ++ # Now convert to journalctl friendly dates ++ if ( $range1 && $range2 ) { ++ ++ # Parse dates ++ my $date1 = ParseDate($range1); ++ my $date2 = ParseDate($range2); ++ ++ # Switch if date2 is before date1 ++ if ( $date1 && $date2 and Date_Cmp( $date1, $date2 ) > 0 ) { ++ my $switch_date = $date1; ++ $date1 = $date2; ++ $date2 = $switch_date; ++ } ++ ++ # If we ask for 1/1 to 1/2, we mean 1/2 inclusive. DM returns ++ # 1/2 00:00:00. So we add 1 day to the end time. ++ $date2 = DateCalc( $date2, '1 day' ); ++ ++ my $fmt = "%Y-%m-%d %H:%M:%S"; ++ push @range, '--since', UnixDate( $date1, $fmt ), '--until', ++ UnixDate( $date2, $fmt ); ++ } ++ } ++ ++ return @range; ++} diff --git a/logwatch-journald-source.patch b/logwatch-journald-source.patch new file mode 100644 index 0000000..43109b8 --- /dev/null +++ b/logwatch-journald-source.patch @@ -0,0 +1,38 @@ +commit ed6eb62f40cb97f71f3df4d982682de68cdf1037 +Author: Stefan Jakobs +Date: Tue May 31 23:34:11 2016 +0200 + + support journald as source + +diff --git a/scripts/services/syslog-ng b/scripts/services/syslog-ng +old mode 100755 +new mode 100644 +index dcd1692..d78c835 +--- a/scripts/services/syslog-ng ++++ b/scripts/services/syslog-ng +@@ -1,5 +1,5 @@ + ########################################################################### +-# $Id$ ++# $Id: syslog-ng 280 2014-12-24 15:29:13Z stefjakobs $ + ########################################################################### + + ########################################################################### +@@ -168,7 +168,7 @@ while (defined($ThisLine = )) { + $Stats_dest{$processed[$i+1]} = + $Stats_dest{$processed[$i+1]} + $processed[$i+2]; + } elsif ($processed[$i] eq "source" || $processed[$i] eq "src.internal" || +- $processed[$i] eq 'src.none' ) { ++ $processed[$i] eq 'src.none' || $processed[$i] eq 'src.journald') { + $Stats_source{$processed[$i+1]} = + $Stats_source{$processed[$i+1]} + $processed[$i+2]; + } elsif ($processed[$i] eq "global") { +@@ -366,7 +366,8 @@ if (keys %Stats_center || keys %Stats_dest || keys %Stats_source || + $lost_rcvd = 0 - $Stats_center{received}; + map { + # skip 'src#X' as this seams to be aggregated into 'src' +- $lost_rcvd = $lost_rcvd + $Stats_source{$_} unless ($_ =~ /src#\d+/); ++ # skip 'journal' as this is not counted. ++ $lost_rcvd = $lost_rcvd + $Stats_source{$_} unless ($_ =~ /(?:src#\d+|journal)/); + } keys %Stats_source; + } + if ($Stats_center{queued} && %Stats_dest) { diff --git a/logwatch.spec b/logwatch.spec index b502fb4..d409d06 100644 --- a/logwatch.spec +++ b/logwatch.spec @@ -1,7 +1,7 @@ Summary: A log file analysis program Name: logwatch Version: 7.4.3 -Release: 2%{?dist} +Release: 3%{?dist} License: MIT Group: Applications/System URL: http://www.logwatch.org/ @@ -16,6 +16,10 @@ Patch2: logwatch-secure-userhelper.patch Patch3: logwatch-sshd.patch # Submitted upstream: https://sourceforge.net/p/logwatch/mailman/message/35076800/ Patch4: logwatch-postfix.patch +# https://sourceforge.net/p/logwatch/git/ci/23e714ad43285d59c5b5852ef2c6013593d64671/ +Patch5: logwatch-journal.patch +# https://sourceforge.net/p/logwatch/git/ci/ed6eb62f40cb97f71f3df4d982682de68cdf1037/ +Patch6: logwatch-journald-source.patch BuildRequires: perl-generators Requires: textutils sh-utils grep mailx Requires: perl(Date::Manip) @@ -37,6 +41,8 @@ of the package on many systems. %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 +%patch6 -p1 rm -f scripts/services/*.orig %build @@ -136,6 +142,9 @@ echo "# Configuration overrides for specific logfiles/services may be placed her %{_mandir}/man*/* %changelog +* Wed Nov 30 2016 Jan Synáček - 7.4.3-3 +- Add systemd journal support (#864872) + * Tue May 10 2016 Jan Synáček - 7.4.3-2 - Fix misaligned output in postfix (#1326808)