Winston: ファイルのカスタムログ形式が機能していないようです

作成日 2015年04月02日  ·  4コメント  ·  ソース: winstonjs/winston

やあ、

フォーマッター関数を使用して、ログメッセージにカスタムフォーマットを提供しました。 これは、transport.Consoleには最適ですが、transport.Fileの継ぎ目はカスタムフォーマッターを無視します。

これが私のカスタムファイルフォーマッターです:

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) : '' );
}

あなたの例で与えられたその本質的なロガー。 私はそれを次のように適用します:

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

ただし、ログファイルの出力は同じままです。
{"level":"info","message":"INITIALISEING","timestamp":"2015-04-02T06:29:57.982Z"}
そのはず:
{"level":"[INFO]","message":"INITIALISEING","timestamp":"2015-04-02T06:29:57.982Z"}

同じことがtransport.Consoleでも機能するので、何が問題なのかわかりません。

助けてください

あいさつ

Tonacate

最も参考になるコメント

分かった、気にしないで。
設定するのを忘れた
json: false

しかし、jsonロギングのいくつかのフィールドだけを変更できれば素晴らしいでしょう:)

全てのコメント4件

分かった、気にしないで。
設定するのを忘れた
json: false

しかし、jsonロギングのいくつかのフィールドだけを変更できれば素晴らしいでしょう:)

「json:false」をどこに設定するかを理解するのに少し時間がかかりました。 ファイルトランスポートに設定します。 これが私の例です:

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)
        })
    ]
});

フォーマッタは私にとっては問題なく動作しますが、タイムスタンプは常にリテラル文字列を出力します

関数 () {
const d = new Date();
d.getHours()+ : + d.getMinutes()+ : +を返します
d.getSeconds()+ m + d.getMilliseconds();
} | DEBUG |デバッグのメッセージ
関数 () {
const d = new Date();
d.getHours()+ : + d.getMinutes()+ : +を返します
d.getSeconds()+ m + d.getMilliseconds();
} |緊急事態|デバッグのためのメッセージ

分かった、気にしないで。
設定するのを忘れた
json: false

しかし、jsonロギングのいくつかのフィールドだけを変更できれば素晴らしいでしょう:)

あなたは私の時間を節約しました! これはどこに文書化されているのだろうか。

このページは役に立ちましたか?
0 / 5 - 0 評価