2012-07-09 5 views
29

Wie kann ich Protokolle drehen, wenn Sie Winston verwenden, um Protokollierung für node.js zu verarbeiten. Das heißt, wie kann ich für jeden Tag, an dem die App läuft, eine neue Datei erstellen?Winston: wie man Protokolle dreht

var logger = new (winston.Logger)({ 
     transports: [ 
      new (winston.transports.Console)(), 
      new (winston.transports.File)({ filename: '2012-07-09.log' }) 
     ] 
}); 

logger.log('info', 'Test Log Message', { anything: 'This is metadata' }); 
+1

+1 - gute Frage! Als reine Vermutung vielleicht schreiben Sie Ihre eigenen Transport-Datei-Logger, die Optionen zur Protokollierung (ähnlich wie IIS und andere Webserver) nimmt? – bryanmac

Antwort

17

Winston Autor und Betreuer hier.

Die tägliche Anmeldung an einer neuen Datei ist derzeit eine offene Feature-Anforderung: https://github.com/flatiron/winston/issues/10. Würde mich freuen jemanden zu sehen, der es implementiert.

Das heißt, gibt es andere Möglichkeiten:

  1. Der File Transport übernimmt eine maxsize Option, die das Logfile drehen wird, wenn es eine bestimmte Größe in Bytes überschreitet.

  2. Es gibt auch eine offene Pull-Anforderung mit einem neuen Transport habe ich keine Chance hatte, um wirklich zu graben sich in „FileRotate“, die es tut diese Art von datumsbasierten Rotation scheint: https://github.com/flatiron/winston/pull/120/files

+0

Charlie, vielen Dank! – Sparky1

+0

Die Lösung: https://gist.github.com/suprememoocow/5133080 – DDS

+1

Dieser Transport wurde jetzt zu einem eigenen npm-Modul hinzugefügt: https://github.com/winstonjs/winston-daily-rotate-file –

3

Laut dem Autor von winston-filerotatedate ist es ein:

Datei-Transport für winston, dass die Log-Dateien kann gedreht werden je nach Größe und Zeit.

Der Dateitransport akzeptiert einen Dateinamen über die Option 'Dateiname' und verwendet diese Datei als primäres Protokollierungsziel. Sollte die Datei über 'maxsize' Bytes hinaus wachsen, wird die aktuelle Protokolldatei umbenannt und eine neue primäre Protokollkachel wird erstellt. Der Name der umbenannten Protokolldatei wird als 'basenameYYYYMMDD [a-z] .bak' formatiert.

Mögliche Optionen sind:

  • Ebene: Ebene der Nachrichten, die dieses Transportprotokoll sollte.
  • silent: Boolesches Flag, das angibt, ob die Ausgabe unterdrückt werden soll.
  • timestamp: Boolesches Flag, das angibt, ob wir Ausgaben mit Zeitstempeln vorausgeben sollen (Standardwert: true). Wenn Funktion angegeben ist, wird der Rückgabewert anstelle von Zeitstempeln verwendet.
  • Dateiname: Der Dateiname der zu schreibenden Logdatei.
  • dirname: Der Ordner das Logfile wird in erstellt werden
  • maxsize. Max Größe in Bytes der Logdatei, wenn die Größe überschritten wird, dann wird eine neue Datei erstellt.
  • json: Wenn dies der Fall ist, werden Nachrichten als JSON protokolliert (Standardwert: true).
20

Die Funktion vorhanden ist, und wir verwenden es in der Produktion, winston.transports.DailyRotateFile:

var timeFormatFn = function() { 
    'use strict'; 
    return moment().format(cfg.timeFormat); 
}; 

var logger = new(winston.Logger)({ 
    exitOnError: false, 
    transports: [ 
     new(winston.transports.DailyRotateFile)({ 
      filename: cfg.appLogName, 
      dirname: __dirname + '/../' + cfg.logsDirectory, 
      datePattern: cfg.rollingDatePattern, 
      timestamp: timeFormatFn 
     }), 
     new(winston.transports.Console)({ 
      colorize: true, 
      timestamp: timeFormatFn 
     }) 
    ] 
}); 
+1

Es wurde geändert : https://github.com/winstonjs/winston/blob/d4fdbadc2f4ab8408261497a116ef80e0f9475a0/CHANGELOG.md#user-content-v200--2015-10-29 – lastboy

0

Sie den folgenden Code verwenden können die Protokolldateien täglich zu drehen:

var winston = require('winston'); 
require('winston-daily-rotate-file'); 
var transport = new (winston.transports.DailyRotateFile)({ 
    filename: './log', 
    datePattern: 'yyyy-MM-dd.', 
    prepend: true, 
    level: info 
}); 
var logger = new (winston.Logger)({ 
    transports: [ 
     transport 
    ] 
}); 
logger.info('Hello World!');