Perl 스크립트에서는 모든 것을 캡처 STDOUT
하고 STDERR
다음 코드를 사용합니다.
open STDOUT, '>>', "$log_file" or die "Can't redirect STDOUT: $!";
open STDERR, ">&STDOUT" or die "Can't add to STDOUT: $!";
main();
여기에서는 생성된 모든 콘텐츠를 기록합니다 main()
. 그런데 각 줄 앞에 타임스탬프를 추가하려면 어떻게 해야 합니까 STDOUT
?
답변1
나는 당신이 이것을 원하는 이유가 모든 인쇄 문에 "인쇄 스칼라 현지 시간"을 포함할 필요가 없기 때문이라고 가정합니다. 그렇다면 더 간단한 방법으로 이 작업을 수행하는 것이 좋습니다.
모든 인쇄 문에 사용하는 대신 print
오류 메시지, 정보 메시지 및 인쇄물을 기록하는 별도의 함수를 만듭니다. 이와 같이:
sub logmsg {
print (scalar localtime() . " @_\n");
}
sub logerr {
print STDERR (scalar localtime() . "ERROR: @_\n");
}
sub debug {
if ($debug) {
print "DEBUG: @_\n";
}
}
그런 다음 스크립트에서 logmsg
필요에 따라 항상 또는를 사용합니다. logerr
이렇게 하면 이러한 몇 가지 기능을 변경하여 로그 메시지의 위치를 쉽게 변경할 수 있습니다. 귀하의 경우 STDOUT/STDERR 대신 파일에 직접 쓰도록 로그 기능을 변경할 수도 있습니다. (나 자신의 경우에는 대신 syslog를 자주 사용하므로 타임스탬프 코드를 제거하고 Sys::Syslog
예를 들어 적절한 기능 및 로그 수준과 함께 사용하겠습니다.)