Date: Mon, 19 May 2003 16:07:38 +0300 From: Giorgos Keramidas <keramida@ceid.upatras.gr> To: Andy Farkas <andyf@speednet.com.au> Cc: freebsd-questions@freebsd.org Subject: Re: timestamping a text stream Message-ID: <20030519130738.GE5081@gothmog.gr> In-Reply-To: <20030519113017.GA46308@zi025.glhnet.mhn.de> References: <20030519174723.B93323-100000@hewey.af.speednet.com.au> <20030519113017.GA46308@zi025.glhnet.mhn.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2003-05-19 13:30, Simon Barner <barner@in.tum.de> wrote: >Andy Farkas <andyf@speednet.com.au> wrote: >> Does anybody know of a program similar to script(1) or tee(1) that >> will timestamp each line of input as it happens? > > You can use this perl script: > > #!/usr/bin/perl -w > # This is timestamp.pl > > use strict; > > my $line=undef; > my $stamp; > while (defined ($line = <>)) { > $stamp = localtime (time ()); > print ("$stamp: $line"); > } Or alternatively, for even more detail in the logs (namely subsecond accuracy in the timestamps), you can use gettimeofday() instead of localtime(): #!/usr/bin/perl -wT use POSIX qw(strftime); require 'sys/syscall.ph'; $| = 1; $TIMEVAL_T = "LL"; while (defined($line = <STDIN>)) { $now = pack($TIMEVAL_T, ()); syscall(&SYS_gettimeofday, $now, 0) != -1 or die "gettimeofday: $!"; @now = unpack($TIMEVAL_T, $now); $ts = strftime("%Y.%m.%d.%H.%M.%S.", localtime($now[0])) . sprintf("%06d", $now[1]); chomp $line; print "$ts| $line\n"; } The time() call of libc will call gettimeofday() anyway in FreeBSD, and strip the subsecond data returned by that system call, so you might as well call gettimeofday() directly :) - Giorgos
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030519130738.GE5081>