
Estou tentando fazer com que stdout e stderr cheguem ao meu arquivo de log para um processo cron. Atualmente, o stdout faz isso conforme pretendido, mas o stderr não. Meus carimbos de data/hora estão criando o problema. Se eu remover a ts
parte do tubo, stdout e stderr chegarão ao arquivo de log, mas as linhas não terão os carimbos de data e hora legais que eu preciso.
Comando Bash:
node index.js | ts '[%Y-%m-%d %H:%M:%S]' >> $(date --utc +\%Y-\%m-\%d).log 2>&1
Script do nó JS:
console.log('log');
console.error('error');
Qual é a aparência do meu arquivo de log:
[2020-04-15 16:26:10] log
Qual será a aparência do meu arquivo de log: (os carimbos de data e hora devem refletir a hora exata em que cada linha é registrada)
[2020-04-15 16:26:10] log
[2020-04-15 16:26:11] error
Atualmente, o stderr é registrado na linha de comando em vez de colocá-lo no arquivo de log datado, que eu preciso. Eu preciso disso para:
- anexar ao arquivo de log, não substituir
- anexar de forma assíncrona para que eu possa
tail -f
ver o registro ao vivo enquanto o script ainda está em execução - cada linha deve ter um carimbo de data/hora anexado
[%Y-%m-%d %H:%M:%S]
no momento real em que a linha é registrada - os arquivos de log devem ser nomeados pelo dia atual (mas não é necessário)
Consegui que cada um deles funcionasse com o comando bash acima, com exceção do stderr... tão perto! Alguém sabe como fazer isso funcionar?
Responder1
Obrigadochave de açopelo seu comentário acima. Aqui está a linha bash agora funcionando:
node index.js 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' >> $(date --utc +\%Y-\%m-\%d).log