Színezd ki a naplódat!

Avagy hogyan tegyük emberi szem által könnyebben olvashatóbbá a rendszernaplókat (system logs). A válasz igen csak kézenfekvő: Perl skripttel. Azért Perl, mert szöveget dolgozunk fel, színezéshez pedig remek eszköz a Term::ANSIColor csomagja. A program páros számú argumentumot feltételez, első a kijelölt (reguláris) kifejezés, őt követi pedig az ANSIColor számára érvényes színkód (pl. RED vagy BOLD YELLOW).

#!/usr/bin/perl -w

use Term::ANSIColor qw(:constants);
use strict;

my %target;

while (my $arg = shift) {
    my $clr = shift;
    $target{$arg} = eval($clr);
}

my $reset = RESET;

while (<>) {
    study;
    foreach my $x (keys(%target)) {
       s/($x)/$target{$x}$1$reset/g;
    }
    print;
}

A skript bemenetére irányítsuk rá a feldolgozandó log állományt, esetleg a less -r-rel összekötve lapozhatjuk is a kimenetet. Az alábbi utasítás az Apache access logját teszi emészhetőbbé azzal, hogy az IP címeket naranccsal, a GET lekéréseket sárgával, a hivatkozó (referrer) címeket élénk kékkel, az opcionális 404-es találatokat pedig pirossal festi. (Lásd képernyőfotó.)

perl szines.pl '^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}' 'YELLOW'
'\s404\s' 'BOLD RED' '(?<=GET\s)[^\s]+' 'BOLD YELLOW' \
'(?<=")http://[^"]+' 'BOLD BLUE' < /var/log/httpd.log | less -r