Redirigir Cron Stderr y Stdout a un archivo de registro con una marca de tiempo

Redirigir Cron Stderr y Stdout a un archivo de registro con una marca de tiempo

Estoy intentando que stdout y stderr lleguen a mi archivo de registro para un proceso cron. Actualmente, stdout lo hace según lo previsto, pero stderr no. Mis marcas de tiempo están creando el problema. Si elimino la tsparte de la tubería, tanto stdout como stderr llegarán al archivo de registro, pero las líneas no tienen las marcas de tiempo agradables que necesito.

Comando bash:

node index.js | ts '[%Y-%m-%d %H:%M:%S]' >> $(date --utc +\%Y-\%m-\%d).log 2>&1

Script de nodo JS:

console.log('log');
console.error('error');

Cómo se ve mi archivo de registro:

[2020-04-15 16:26:10] log

Cómo quiero que se vea mi archivo de registro: (las marcas de tiempo deben reflejar la hora exacta en que se registra cada línea)

[2020-04-15 16:26:10] log
[2020-04-15 16:26:11] error

Actualmente, stderr se registra en la línea de comando en lugar de incluirse en el archivo de registro fechado, que necesito. Lo necesito para:

  • agregar al archivo de registro, no sobrescribir
  • agregue async-ly para poder tail -fver el registro en vivo mientras el script aún se está ejecutando
  • cada línea debe tener una marca de tiempo antepuesta [%Y-%m-%d %H:%M:%S]en el momento real en que se registra esa línea
  • los archivos de registro deben tener el nombre del día actual (pero no es necesario)

He logrado que cada uno de estos funcione con el comando bash anterior con la excepción de stderr... ¡tan cerca! ¿Alguien sabe cómo hacerlo funcionar?

Respuesta1

Graciasconductor de aceropor tu comentario arriba. Aquí está la línea bash que ahora funciona:

node index.js 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' >> $(date --utc +\%Y-\%m-\%d).log

información relacionada