Leiten Sie Cron Stderr und Stdout in eine Protokolldatei mit einem Zeitstempel um

Leiten Sie Cron Stderr und Stdout in eine Protokolldatei mit einem Zeitstempel um

Ich versuche, stdout und stderr dazu zu bringen, es in meine Protokolldatei für einen Cron-Prozess zu schaffen. Derzeit schafft es stdout wie vorgesehen, stderr jedoch nicht. Das Problem entsteht durch meine Zeitstempel. Wenn ich den Pipe- tsTeil entferne, schaffen es sowohl stdout als auch stderr in die Protokolldatei, aber die Zeilen haben nicht die schönen Zeitstempel, die ich brauche.

Bash-Befehl:

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

Node JS-Skript:

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

So sieht meine Protokolldatei aus:

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

So soll meine Protokolldatei aussehen: (Zeitstempel sollten den genauen Zeitpunkt der Protokollierung jeder Zeile wiedergeben)

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

Derzeit wird der stderr in der Befehlszeile protokolliert, anstatt ihn in die datierte Protokolldatei zu schreiben, die ich benötige. Ich brauche es für:

  • an die Logdatei anhängen, nicht überschreiben
  • asynchron anhängen, damit ich tail -fdie Live-Protokollierung sehen kann, während das Skript noch läuft
  • jeder Zeile sollte ein Zeitstempel vorangestellt werden, [%Y-%m-%d %H:%M:%S]der den tatsächlichen Zeitpunkt angibt, zu dem die Zeile protokolliert wird
  • Logdateien sollten nach dem aktuellen Tag benannt sein (ist aber nicht notwendig)

Ich habe alle davon mit dem obigen Bash-Befehl zum Laufen gebracht, mit Ausnahme von stderr... also fast! Weiß jemand, wie es funktioniert?

Antwort1

DankeStahltreiberfür Ihren Kommentar oben. Hier ist die jetzt funktionierende Bash-Zeile:

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

verwandte Informationen