Перенаправление Cron Stderr и Stdout в файл журнала с меткой времени

Перенаправление Cron Stderr и Stdout в файл журнала с меткой времени

Я пытаюсь заставить stdout и stderr попасть в мой файл журнала для процесса cron. В настоящее время stdout делает это, как и предполагалось, а stderr — нет. Мои временные метки создают проблему. Если я уберу часть с каналом ts, и stdout, и stderr попадут в файл журнала, но строки не будут иметь нужных мне хороших временных меток.

Команда Bash:

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

Скрипт Node JS:

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

Вот как выглядит мой лог-файл:

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

Как должен выглядеть мой файл журнала: (временные метки должны отражать точное время записи каждой строки)

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

В настоящее время stderr регистрируется в командной строке вместо того, чтобы попасть в файл журнала с датой, который мне нужен. Мне нужно, чтобы:

  • добавлять в файл журнала, а не перезаписывать
  • добавить асинхронно, чтобы я мог tail -fвидеть ведение журнала в реальном времени, пока скрипт все еще работает
  • Каждая строка должна иметь предваряющую ее временную метку, [%Y-%m-%d %H:%M:%S]соответствующую фактическому времени регистрации строки.
  • Файлы журналов должны быть названы по текущему дню (но это не обязательно)

Я заставил все это работать с указанной выше командой bash, за исключением stderr... так близко! Кто-нибудь знает, как заставить это работать?

решение1

Спасибостальной драйвердля вашего комментария выше. Вот теперь рабочая строка bash:

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

Связанный контент