@indexzero -
Was halten Sie davon, dem Dateitransport einen optionalen API-Parameter hinzuzufügen, damit Protokolldateien nach Datum aufgeteilt werden können? Die Idee wäre, dass an jedem neuen Tag eine neue Protokolldatei erstellt wird und Winston all dies automatisch verarbeitet / basierend auf dem Datum weiß, in welche Protokolldatei geschrieben werden soll.
Würde die Patch-Anfrage dafür akzeptieren
Cool! Irgendwelche Vorschläge für eine API? Ich dachte an so etwas wie:
// Specify path option and default to spanning by day ( 24 hours in each file )
new (winston.transports.File)({ path: './logs' })
es könnte jedoch ein nützliches Hilfsmittel sein, einen benutzerdefinierten Datums- / Zeitfilter zuzulassen.
Es besteht keine Notwendigkeit, den Winston-Code zu komplizieren, wenn es ein Standardwerkzeug für diese Aufgabe gibt: Logrotate (http://linuxcommand.org/man_pages/logrotate8.html)
@indexzero Ist der Patch dafür noch akzeptabel? Ich weiß, dass dies über die Dateinamenoption implementiert werden kann, aber ich kann eine andere Option dafür hinzufügen.
es ist nicht die Aufgabe einzelner Daemons, jede Log-Rotation zu implementieren. Aus diesem Grund haben wir Tools wie logrotate, wie @cemuzunlar sagte.
@cemuzunlar @Dieterbe
Ich stimme zu, idealerweise wäre das nicht Winstons Problem, aber
Aha...
laut denken: Log-Rotationslogik in ein separates Node-Programm verschieben, sodass es sich um einen wiederverwendbaren einfachen Logrotate-Klon handelt, der plattformübergreifend funktioniert.
++1
Obwohl ich auch ein Verfechter von Logrotate bin, tut es seine Arbeit nicht allein. Logrotate ist so nützlich, weil es eine Methode bietet, um Programmen mitzuteilen, dass es Zeit ist, ihre Protokolle zu leeren und zu schließen.
Der Dateitransport hat eine _createStream.checkFile.createAndFlush-Funktion, die auf den ersten Blick so aussieht, als ob sie die entsprechenden Dinge tun sollte. Um dies für logrotate zu verwenden, lassen Sie Ihr Knotenprogramm Trap SIGHUP programmieren und greifen Sie auf diese Funktion zu. Ich habe vor meinem Job keine Zeit, um Codes zu posten, aber ich werde heute Abend versuchen, meine Ergebnisse zu veröffentlichen.
Auf SIGHUP auf diese Weise zu reagieren, sollte auf Windows übertragbar sein, und dann bleibt die Log-Rotation, die Sie in Windows verwenden (Knotenbibliothek oder andere Magie), dem Leser als Übung überlassen.
Falls noch jemand danach sucht:
Danke für den Tipp, @pccowboy. Ich bin auch ein großer Verfechter von Logrotate. Ich zögere, eine Konfiguration für den node.js-Dienst (dh Winston File maxsize usw.) und eine andere (logrotate) für andere Dienste (nginx, redis usw.) zu verwenden und würde es vorziehen, logrotate für alle meine Protokolldateien zu verwenden. Ich habe eine einfache Funktion zusammengestellt, die HUP-Signale abhört und die Protokolldatei nach dem Rotieren erneut öffnet.
Bei Gelegenheit werde ich versuchen, dies sauberer umzuschreiben (dh als Konfigurationsoption für den Dateitransport) und einen Pull-Request zu erstellen.
Behoben durch #205.
genial!
Hilfreichster Kommentar
Es besteht keine Notwendigkeit, den Winston-Code zu komplizieren, wenn es ein Standardwerkzeug für diese Aufgabe gibt: Logrotate (http://linuxcommand.org/man_pages/logrotate8.html)