package perfSONAR_PS::NetLogger; use strict; use warnings; require 5.002; use Time::HiRes; our $VERSION = 0.08; # initialize Global GUID my $GUID = `/usr/bin/uuidgen`; sub format { my($evnt, $data) = @_; my($str) = ""; if ( exists $data->{'ts'} ) { $str = "ts=$data->{ 'ts' } "; } else { my $dt = date(); $str = "ts=$dt "; } $str .= "event=$evnt "; foreach my $k (keys %$data) { $str .= "$k=$data->{$k} "; } $str .= "guid=".$GUID; return $str; }; sub date { my($tm, $usec) = Time::HiRes::gettimeofday(); my($sec,$min,$hour,$mday,$mon,$year,$wday, $yday,$isdst)=gmtime($tm); return sprintf("%04d-%02d-%02dT%02d:%02d:%02d.%06dZ",$year + 1900,$mon + 1, $mday,$hour,$min,$sec,$usec); } sub get_guid { return (`/usr/bin/uuidgen`); } sub set_guid # reset GUID { $GUID = `/usr/bin/uuidgen`; return; } 1; __END__ =head1 NAME NetLogger - A module that provides tools to generate NetLogger formatted messages for log4perl =head1 DESCRIPTION For more information on NetLogger see: http://dsd.lbl.gov/NetLoggerWiki/index.php/Main_Page =head1 SYNOPSIS =head1 API The API of NetLogger is used to format log messages in the NetLogger 'Best Practices' format. See: http://www.cedps.net/wiki/index.php/LoggingBestPractices =head2 format("event_name", list of name=>value pairs) Sample use: use Log::Log4perl qw(:easy); use NetLogger; Log::Log4perl->easy_init($DEBUG); my $logger = get_logger("my_prog"); $logger->info(NetLogger::format("org.perfsonar.client.parseResults.start")); # call function here $logger->info(NetLogger::format("org.perfsonar.client.parseResults.end", {val=>12,})); This will generate a log that looks like this: 2007/12/19 13:51:26 39899 INFO> myprog:NN main:: - ts=2007-12-19T21:51:26.030823Z \ event=org.perfsonar.client.runQuery1.end guid=736ee764-ae7c-11dc-9f7d-000f1f6ed15d =head1 AUTHOR Dan Gunter, dkgunter@lbl.gov =head1 LICENSE See: http://dsd.lbl.gov/NetLoggerWiki/index.php/Licensing =head1 COPYRIGHT Copyright (c) 2004-2007, Lawrenence Berkeley National Lab and the University of California All rights reserved. =cut