Winston: Fügen Sie die Möglichkeit für den Dateitransport hinzu, Protokolle nach Datum aufzuteilen

Erstellt am 29. Mai 2011  ·  12Kommentare  ·  Quelle: winstonjs/winston

@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.

feature request

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)

Alle 12 Kommentare

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

  • winston läuft unter Windows, das logrotate nicht hat, trotz einiger (schwach aussehender) einfacher Versuche in verschiedenen Blogs (und einiger Vorschläge, cygwin + ein selbst kompiliertes logrotate zu verwenden, aber ich bezweifle, dass dies aus theoretischen Gründen überhaupt möglich wäre, vorausgesetzt dass Winston die Datei zum Schreiben geöffnet hält, was stark einschränkt, was Sie mit dieser Datei unter Windows tun können)
  • Der Dateitransport von winston führt bereits eine Protokollrotation durch, wird nur nach Dateigröße und nicht nach Datum aufgeteilt. Und es löscht auch alte Dateien, also alle grundlegenden Funktionen zur Protokollrotation

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.

https://gist.github.com/suprememoocow/5133080

Behoben durch #205.

genial!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen