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); } #### 16:57:23:238 progman: sent supervisor - progman,ctrlman,set,wort_pump,off 16:57:23:240 supervisor: rcvd pidman - pidman,webman,status,hlt_duty,0 16:57:23:239 progman: sent supervisor - progman,ctrlman,set,boil_heater,off 16:57:23:240 progman: sent supervisor - progman,ctrlman,set,hlt_heater,off 16:57:23:241 progman: sent supervisor - progman,ctrlman,set,hlt_ssr,off 16:57:23:241 supervisor: sent ctrlman - pidman,webman,status,hlt_duty,0 16:57:23:234 ctrlman: rcvd supervisor - pidman,webman,status,hlt_duty,0 16:57:23:244 supervisor: sent progman - pidman,webman,status,hlt_duty,0 16:57:23:245 supervisor: sent webman - pidman,webman,status,hlt_duty,0 16:57:23:250 webman: rcvd supervisor - pidman,webman,status,hlt_duty,0 16:57:23:241 progman: sent supervisor - progman,ctrlman,set,boil_ssr,off 16:57:23:246 progman: sent supervisor - progman,webman,status,hlt_duty,0 16:57:23:246 progman: sent supervisor - progman,webman,status,hlt_setpoint,0 16:57:23:246 supervisor: rcvd progman - progman,webman,status,step,startup 16:57:23:249 supervisor: sent webman - progman,webman,status,step,startup 16:57:23:253 webman: rcvd supervisor - progman,webman,status,step,startup 16:57:23:250 supervisor: sent ctrlman - progman,webman,status,step,startup 16:57:23:241 ctrlman: rcvd supervisor - progman,webman,status,step,startup 16:57:23:247 progman: sent supervisor - progman,webman,status,hlt_mode,pid 16:57:23:251 progman: sent supervisor - progman,webman,status,hlt_power,100 16:57:23:251 progman: sent supervisor - progman,webman,status,hlt_vary,1