Perlscript 내의 각 STDOUT 줄 앞에 타임스탬프를 추가하세요.

Perlscript 내의 각 STDOUT 줄 앞에 타임스탬프를 추가하세요.

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예를 들어 적절한 기능 및 로그 수준과 함께 사용하겠습니다.)

관련 정보