
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- ts
Teil 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 -f
die 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