
cron プロセスのログ ファイルに stdout と stderr を出力しようとしています。現在、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]
その行が記録された実際の時刻のタイムスタンプが付加される必要があります。 - ログファイルには現在の日付で名前を付ける必要があります(ただし必須ではありません)
stderr を除いて、上記の bash コマンドでそれぞれを動作させることができました... ほぼ完了です! 動作させる方法を誰か知っていますか?
答え1
ありがとうスチールドライバー上記のコメントに対して。現在機能している bash 行は次のとおりです。
node index.js 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' >> $(date --utc +\%Y-\%m-\%d).log