use Fcntl qw(:flock SEEK_END); # --------------------------------------- # sub logmsg # --------------------------------------- sub logmsg { my $now = time; my $msec = int( ( $now - int($now) ) * 1000 ); my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time); sub lock { flock( LOG, LOCK_EX ); # and, in case someone appended # while we were waiting... seek( LOG, 0, SEEK_END ); } sub unlock { flock( LOG, LOCK_UN ); } open LOG, ">> $logFilename"; lock(); printf LOG "%02d:%02d:%02d:%03d %s\r\n", $hour, $min, $sec, $msec, @_; unlock(); close(LOG); }