
Я пытаюсь заставить 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