Come posso controllare un file di log e di inserimento timestamp, utilizzando Perl?
Domanda
Ho un'applicazione che genera i registri in accodamento, ma i registri non sono timestamped.
E 'possibile utilizzare tail -f
con qualche opzione, o di uno script perl
per monitorare le scritture a questo file e li prefisso con un timestamp?
Premesso che io sono in esecuzione Windows senza Cygwin, potrebbe evito utilizzando bash o qualsiasi altro Unix shell?
Soluzione
se si utilizza GNU coda, allora si dovrebbe essere in grado di utilizzare GNU gawk .
C:\test>tail -F file | gawk.exe "{s=systime(); print strftime(\"%Y-%m-%d:%H:%M:%S\",s),$0}"
Altri suggerimenti
Si potrebbe usare un ciclo while:
tail -f logfile | while read line;
do
echo $(date) $line;
done
implica data per ogni linea però in esecuzione. È possibile utilizzare le opzioni di output formato del comando date per ottenere il formato di data e ora che si desidera.
I molto di base Perl equivalente sarebbe (script.pl):
while (<>) {
my $date = scalar localtime;
print $date . " " . $_;
}
tail -f logfile | perl script.pl
Può essere che si potrebbe utilizzare uno script perl con File :: coda e DateTime?
use File::Tail;
use DateTime;
my $ref=tie *FH,"File::Tail",(name=>$ARGV[0]);
while (<FH>) {
my $dt = DateTime->now();
print "[", $dt->dmy(), " ",$dt->hms(),"] $_";
}
Sembra che il File::Tail
modulo è stato progettato specificamente per la lettura in log accodato file.
Può valere la pena dare un'occhiata.