Добавление метки времени перед каждой строкой STDOUT внутри perlscript

Я нашел решение. Проблемой является mod_deflate, который включен по умолчанию на debian, но не используется на FreeBSD по умолчанию. Выключение mod_deflate дает мне вывод по требованию.

2
21.03.2014, 18:02
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 с соответствующими возможностями и уровнем журнала.)

2
27.01.2020, 22:13

Теги

Похожие вопросы