Как я могу отслеживать файл журнала и вставлять метки времени, используя Perl? - PullRequest
1 голос
/ 20 октября 2010

У меня есть приложение, которое генерирует журналы в режиме добавления, но журналы не имеют меток времени.

Можно ли использовать tail -f с каким-либо параметром или сценарий perl для мониторинга записей в этомфайл и префикс их с отметкой времени?

Учитывая, что я использую Windows без Cygwin, могу ли я избежать использования bash или любой другой оболочки Unix?

Ответы [ 4 ]

2 голосов
/ 20 октября 2010

если вы используете GNU tail, то вы сможете использовать GNU gawk .

C:\test>tail -F file  | gawk.exe "{s=systime(); print strftime(\"%Y-%m-%d:%H:%M:%S\",s),$0}"
2 голосов
/ 20 октября 2010

Вы можете использовать цикл while:

tail -f logfile | while read line;
do
    echo $(date) $line;
done

Хотя подразумевается дата выполнения для каждой строки.Вы можете использовать параметры вывода формата команды date, чтобы получить желаемый формат отметки времени.

Я бы использовал базовый эквивалент Perl (script.pl):

while (<>) {
    my $date = scalar localtime;
    print $date . " " . $_;
}

tail -f logfile | perl script.pl
1 голос
/ 20 октября 2010

Может быть, вы могли бы использовать Perl-скрипт с File :: Tail и 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(),"] $_";
}
0 голосов
/ 20 октября 2010

Похоже, что модуль File::Tail был разработан специально для чтения в добавленных файлах журнала.

Может быть стоит посмотреть.

...