Winston: Benutzerdefiniertes Protokollformat für Dateien scheint nicht zu funktionieren

Erstellt am 2. Apr. 2015  ·  4Kommentare  ·  Quelle: winstonjs/winston

Hi,

Ich habe Ihre Formatierungsfunktion verwendet, um meinen Protokollnachrichten ein benutzerdefiniertes Format bereitzustellen. Es funktioniert perfekt für die transport.Console, aber die transport.File scheint den benutzerdefinierten Formatierer zu ignorieren.

Heres mein benutzerdefinierter Dateiformatierer:

function customFileFormatter (options) {
    // Return string will be passed to logger.
    return options.timestamp() +' ['+ options.level.toUpperCase() +'] '+ (undefined !== options.message ? options.message : '') +
     (options.meta && Object.keys(options.meta).length ? '\n\t'+ JSON.stringify(options.meta) : '' );
}

Es ist wichtig, dass der Logger in Ihrem Beispiel verwendet wird. Ich wende es so an:

winston.add(winston.transports.File, { 
    name: 'info-file',
    filename: logPath + '/info.log',
    level: 'info',
    maxsize: 15000000,
    formatter: customFileFormatter
});

aber die Ausgabe in der Logging-Datei bleibt gleich:
{"level":"info","message":"INITIALISEING","timestamp":"2015-04-02T06:29:57.982Z"}
es sollte sein:
{"level":"[INFO]","message":"INITIALISEING","timestamp":"2015-04-02T06:29:57.982Z"}

Ich weiß nicht, woran es liegt, denn das gleiche funktioniert mit der transport.Console.

bitte hilfe

Schöne Grüße

Tonacate

Hilfreichster Kommentar

Ok, vergiss 'es.
vergessen einzustellen
json: false

aber es wäre cool, wenn Sie nur einige Felder in der Json-Protokollierung ändern könnten :)

Alle 4 Kommentare

Ok, vergiss 'es.
vergessen einzustellen
json: false

aber es wäre cool, wenn Sie nur einige Felder in der Json-Protokollierung ändern könnten :)

Ich habe ein bisschen gebraucht, um herauszufinden, wo "json: false" gesetzt werden soll. Legen Sie es auf den Dateitransport(en) fest. Hier ist mein Beispiel:

const logFormatter = function(options) {
    // Return string will be passed to logger.

    return options.timestamp() +` `+ options.level.toUpperCase() +
        ` `+ (options.message ? options.message : ``) +
        (options.meta && Object.keys(options.meta).length ?
            `\n\t`+ JSON.stringify(options.meta) : `` );
};

const timestamp = function() {
    const d = new Date();
    return d.getHours() + `:` + d.getMinutes() + `:` +
        d.getSeconds() + `m` + d.getMilliseconds();
};

const logger = new (winston.Logger)({
    transports: [
        new (winston.transports.File)({
            timestamp: timestamp,
            formatter: logFormatter,
            level: `silly`,
            name: `fileAll`,
            filename: `fileAll.log`,
            json: false,                                 // set json:false on the file transport(s)
        })
    ]
});

Der Formatierer funktioniert bei mir gut, aber der Zeitstempel gibt immer eine wörtliche Zeichenfolge aus

Funktion () {
const d = neues Datum();
return d.getHours() + : + d.getMinutes() + : +
d.getSeconds() + m + d.getMilliseconds();
}|DEBUG|Nachricht für einen Debug
Funktion () {
const d = neues Datum();
return d.getHours() + : + d.getMinutes() + : +
d.getSeconds() + m + d.getMilliseconds();
}|EMERGENCY|Nachricht für einen Debug

Ok, vergiss 'es.
vergessen einzustellen
json: false

aber es wäre cool, wenn Sie nur einige Felder in der Json-Protokollierung ändern könnten :)

Sie haben meine Zeit gespart! Ich frage mich, wo das dokumentiert ist..

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen