Adicionando timestamp antes de cada linha STDOUT dentro do perlscript

2

Em um script perl, estou capturando todos os STDOUT e STDERR usando o código abaixo:

open STDOUT, '>>', "$log_file" or die "Can't redirect STDOUT: $!";
open STDERR, ">&STDOUT"  or die "Can't add to  STDOUT: $!";
main();

Aqui estou registrando todos os que são gerados a partir de main() , mas como posso adicionar um carimbo de data e hora na frente de cada linha de STDOUT ?

    
por kumarprd 21.03.2014 / 14:25

1 resposta

2

Estou assumindo que a razão pela qual você quer fazer isso é para que você não precise incluir "print scalar localtime" para cada declaração impressa. Se assim for, eu recomendaria fazer isso de maneira mais simples.

Em vez de usar print em cada declaração de impressão, crie funções separadas para registrar mensagens de erro, mensagens informativas e saída de impressão. Assim:

sub logmsg {
  print (scalar localtime() . " @_\n");
}

sub logerr {
  print STDERR (scalar localtime() . "ERROR: @_\n");
}

sub debug {
  if ($debug) {
    print "DEBUG: @_\n";
  }
}

Em seguida, no script, sempre usarei logmsg ou logerr , conforme apropriado. Isso facilita a mudança para onde as mensagens de log vão alterando essas poucas funções. No seu caso, você também pode alterar as funções de log para gravar diretamente no arquivo em vez de para STDOUT / STDERR. (No meu próprio caso, usarei frequentemente o syslog, então removerei o código do registro de data e hora e, em vez disso, utilizarei, por exemplo, Sys::Syslog com o nível adequado de instalação e registro.)

    
por 21.03.2014 / 15:02