Rotatelogs girando arquivos de log no meio da entrada de log

2

Eu tenho uma ferramenta c ++ que é enviada para STDOUT via printf, por exemplo

printf ("%s\n", logline);  

Eu então canalizo isso para rotatelogs, ou seja,

tool | rotatelogs /tmp/logs/log_%s 60  

Tudo funciona muito bem, mas os rotatelogs girarão a linha média para que o arquivo de log 1 tenha este snippet json:

{"tim  

... e o arquivo de log 2 terá:

e":1386088072}  

Existe uma maneira de incentivar rotatelogs a girar em quebras de linha?

    
por Brian Haines 03.12.2013 / 17:39

2 respostas

2

Resposta simples: buffer de IO. Desativar prefixando seu comando com:

stdbuf -i0 -o0 -e0  

por exemplo:

stdbuf -i0 -o0 -e0  tool | rotatelogs /tmp/logs/log_%s 60
    
por 04.12.2013 / 15:27
0

Se a ferramenta que você possui for sua ou se você tiver uma fonte dela, corrija-a primeiro. Eu assumi que a ferramenta é um daemon, pois tem log para girar. (significa que tem ciclo de vida a longo prazo). para ser um deamon, ele deve duplicar std * e fechar originais relacionados a tty. (é um pouco fora do tópico.)

De qualquer forma, se você não pode tocar na fonte, eu recomendo usar 'logrotate' em vez de apache 'rotatelogs'. é mais geral e bem feita ferramenta para fins genéricos.

um dos problemas comuns dos rotatelogs é que, se o processo de rotatelogs estiver morto, todas as saídas são eliminadas. então tente:

$ tool > logfile &

e crie ou edite logrotate.conf para logfile.

    
por 03.12.2013 / 18:20