Navigation


RSS / Atom



Clever timestamps but is it a good idea?

2005-09-29 , ,

At work I have a collection of long-running Perl programs exec-ed by a rc script that have their noise redirected to a single intermingled log. The scripts themselves and the modules they use are littered with carps, warns and print STDERRs depending upon when and by whom they were written. I can differentiate their output (more or less) but I’d like it timestamped for forensic purposes.

My first thought, heaven help me, involving tying filehandles is exampled by this hack:

!/usr/local/bin/perl -w use Tie::Handle; use Carp; use strict; package TimeStamper; @ISA = qw(Tie::Handle); sub wrap { my $fh = shift; my $fh_name = $fh; $fh_name =~ s/^\*//; local *MYFH; open(MYFH, “>&$fh_name”) or die(“Failed to dupe [$fh_name]: $!”); tie($fh,‘TimeStamper’,*MYFH); } sub TIEHANDLE { my ($class,$fh) = @_; my $obj = bless [$fh],$class; return $obj; } sub PRINT { my $self = shift; my $fh = $self->0; my t = localtime(); print sprintf("[%4d/%02d/%02d %02d:%02d:%02d] ", $t[5]+1900,t[4,3,2,1,0]),@_; } package main; TimeStamper::wrap(*STDERR); print STDERR “This is timestamped.\n”; warn(‘This is timestamped.’); carp(‘This is timestamped.’); print “This is not timestamped.\n”;

Neat. Even half clever. But I’m not sure it’s a good idea.

Comment


Comments [1]

2005-09-30 21:01 , Ross

Whoops. Left the old tie in main when I had changed to wrap. Fixed.


Commenting is closed for this article.