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

В 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 ?

  • Как я могу запустить код BASIC в терминале?
  • Выполните команду в 'sed'
  • Обработка динамически изменяющихся позиций столбцов и разбиения файлов
  • Подстрока Perl-stripping с $ спереди
  • Получить последний набор непустых строк
  • изменить строку и удалить тег, используя perl из xml-файла?
  • как заменить выражение sed / perl (изменить и распечатать только согласованную строку) с выражением python?
  • Linux эквивалентен удалению PowerShell «один ко многим»
  • Удалить до заданного символа, начиная с заданной строки
  • Как сортировать с разделителем длиной несколько символов?
  • Как запускать несколько скриптов параллельно
  • Как условия гонки влияют на чтение и запись (которые происходят одновременно)
  • One Solution collect form web for “Добавление метки времени перед каждой строкой STDOUT внутри perlscript”

    Я предполагаю, что причина, по которой вы хотите сделать это, заключается в том, что вам не нужно включать «print scalar localtime» для каждого оператора печати. Если это так, я бы рекомендовал сделать это более простым способом.

    Вместо использования 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 с соответствующим уровнем и уровнем журнала.)

    Linux и Unix - лучшая ОС в мире.