logwatchでDNFのログを出してみた

スポンサーリンク

logwatchでDNF
Fedora 23を使っていますが、yumからDNFに乗り換えたところlogwatchでログが出力されません。なんとかならないかとググってみましたが、まだ対応していないようです。

ということで手動で追加してみました。

出力ログを追加するには、通常3つのファイルを作成しますが、今回は4つのファイルを作ります。ほとんどyum用のファイルを流用してるんですけどね!

サービス名を指定
/usr/share/logwatch/default.conf/services/dnf.conf

Title = “dnf”
LogFile = dnf

対象ログを指定
/usr/share/logwatch/default.conf/logfiles/dnf.conf

LogFile = dnf.rpm.log

出力スクリプトを作成
/usr/share/logwatch/scripts/services/dnf

$Debug = $ENV{'LOGWATCH_DEBUG'} || 0;

if ( $Debug >= 5 ) {
print STDERR "\n\nDEBUG: Inside DNF Filter \n\n";
$DebugCounter = 1;
}

while (defined($ThisLine = <STDIN>)) {
if ( $Debug >= 5 ) {
print STDERR "DEBUG($DebugCounter): $ThisLine";
$DebugCounter++;
}

if ( $ThisLine =~ s/INFO Upgraded: ([^ ]+)/$1/ ) {
$PackageUpgraded{$ThisLine}++;
} elsif ( $ThisLine =~ s/INFO Installed: ([^ ]+)/$1/ ) {
$PackageInstalled{$ThisLine}++;
} elsif ( $ThisLine =~ s/INFO Cleanup: ([^ ]+)/$1/ ) {
$PackageCleanup{$ThisLine}++;
} elsif ( $ThisLine =~ s/INFO Erased: ([^ ]+)/$1/ ) {
$PackageErased{$ThisLine}++;
} elsif ( $ThisLine =~ /logging initialized.*/o ) {
#
} else {
push @OtherList,$ThisLine;
}
}

if (keys %PackageInstalled) {
print "\nPackages Installed:\n";
foreach $ThisOne (keys %PackageInstalled) {
print " " . $ThisOne;
}
}
if (keys %PackageCleanup) {
print "\nPackages Cleanup:\n";
foreach $ThisOne (keys %PackageCleanup) {
print " " . $ThisOne;
}
}
if (keys %PackageUpgraded) {
print "\nPackages Upgraded:\n";
foreach $ThisOne (keys %PackageUpgraded) {
print " ". $ThisOne;
}
}
if (keys %PackageErased) {
print "\nPackages Erased:\n";
foreach $ThisOne (keys %PackageErased) {
print " ". $ThisOne;
}
}

if ($#OtherList >= 0) {
print "\n**Unmatched Entries**\n";
print @OtherList;
}

exit(0);

前日のログのみ検出?
/usr/share/logwatch/scripts/logfiles/dnf/applydate

use POSIX qw(strftime);
use Logwatch ':dates';

my $Debug = $ENV{'LOGWATCH_DEBUG'} || 0;

my $time = time;

$SearchDate = TimeFilter('%m/%d/%y %H:%M:%S');
$SearchNewDate = TimeFilter('%b %d %H:%M:%S');

if ( $Debug > 5 ) {
print STDERR "DEBUG: Inside ApplyDate (yum)…\n";
print STDERR "DEBUG: Looking For: " . $SearchDate . " or " . $SearchNewDate . "\n";
}

while (defined($ThisLine = <STDIN>)) {
# Here we actually remove the dates, as well
if ($ThisLine =~ s/^$SearchNewDate //o ||
$ThisLine =~ s/$SearchDate //o) {
print $ThisLine;
}
}

4つめのapplydateの存在に気付かなくて、前日のみ出力ってどうやるんだろうと悩みました。

動作確認で出力してみます。
# logwatch –service dnf

正常に出力されていればOKです。

コメント

タイトルとURLをコピーしました