Rotating logs gerados por um processo que registra para stdin

6

Eu tenho um longo processo em execução, que grava seu arquivo de log em stdout . Eu gostaria de salvar esta saída para arquivos diferentes, manter automaticamente esses arquivos (como excluir / arquivar os antigos), sem reiniciar o processo principal.

Na solução, seria enviar a saída para um arquivo ( process > log.txt ) e usar logrotate , mas logrotate precisa reiniciar o programa, o que não é possível.

O outro é canalizar a saída para cronolog ( process | cronolog ), mas, nesse caso, os arquivos mais antigos não serão excluídos / arquivados, o que significa que tenho que criar um programa que faça a manutenção para mim.

O melhor seria poder usar os dois utilitários, porque com cronolog eu não preciso reiniciar o processo e logrotate manterá os arquivos de log antigos exatamente como eu quero. Existe uma maneira de obter esses dois programas para trabalhar uns com os outros? Se não, qual é uma boa solução para este problema?

    
por SztupY 03.11.2012 / 19:58

1 resposta

4

Multilog da DJB's daemontools pode fazer (quase) exatamente o que você está pedindo. A única desvantagem de que estou ciente é que muitas distribuições não têm um pacote para daemontools .

Se você não está gerenciando seu aplicativo com svc (parte dos daemontools) você terá que encontrar uma maneira de enviar a saída para um comando como

multilog t s1048576 n100 ./my_log_directory

Isso se traduz em:

  • t : insere um timestamp tai64n (que pode ser traduzido para um tempo legível com tai64nlocal )
  • s1048576 : rotaciona o arquivo de log quando crescer para 1 MiB
  • n100 : não mantenha mais de 100 arquivos girados
  • ./my_log_directory : qualquer coisa que comece com . ou / - grave o log nesse diretório

O log que está escrito terá o nome de arquivo current , e quando o multilog rotacionar o log, ele será renomeado para @<tai64n timestamp>.s , onde o nome do arquivo mostrará a hora em que o arquivo foi girado. A extensão pode ser .s se o arquivo foi liberado com segurança ou .u se ele tiver sido truncado.

Para mais informações, basta verificar os links.

    
por 05.11.2012 / 10:01