すべてのログに、ログの出所を表すプレフィックスを付けたいと思います。 この方法では、同じファイルに対して複数のトランスポートが作成されます。これは明らかに
var config = require('config')
var winston = require('winston')
var loggers = {}
function getLogger(moduleName) {
if (!loggers[moduleName]) {
loggers[moduleName] = createNewLogger(moduleName)
}
return loggers[moduleName]
}
function createNewLogger(moduleName) {
var logger = new winston.Logger()
//https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport
logger.add(winston.transports.Console,
{
colorize: true,
timestamp: true,
label: moduleName,
level: config.get('log.level')
}
)
logger.add(winston.transports.DailyRotateFile,
{
filename: config.get('log.filename'),
level: config.get('log.level')
}
)
return logger
}
module.exports = getLogger
基本的に、すべてのログを1つのファイル/コンソールに入れたいのですが、プレフィックスは異なります。 何か案は?
私はあなたがこれを望んでいると信じています: https ://github.com/winstonjs/winston#working -with-multiple-loggers-in-winston
これをありがとう! 以前に見たことがありますが、ロガーごとにトランスポートが再現されているような印象を受けました。
たとえば、次のコード:
function getLogger(moduleName) {
console.log('Initializing logger for: ' + moduleName)
winston.loggers.add(moduleName, {
//https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport
Console: {
colorize: true,
timestamp: true,
label: moduleName,
level: config.get('log.level')
},
DailyRotateFile: {
filename: config.get('log.filename'),
level: config.get('log.level')
}
})
return winston.loggers.get(moduleName)
}
Error: Transport already attached: console
を与えます
私は間違って何をしていますか?
ねえ@indexzero 、
私はウィンストン3.0.0
います。
私もこれを試しましたが、これが正しい方法かどうかはわかりません。 基本的に、各ログメッセージにプレフィックスを付けるか、ログのログ元のモジュール/関数に基づいて各ログのデフォルトフィールドを添付する簡単な方法が必要です(一部の構造の場合)。 これはコードです(ドキュメントの例を参照):
const loggers = {};
module.exports.getModuleLogger = (moduleName, methodName) => {
const categoryName = [moduleName, methodName].join(':');
if (!loggers[categoryName]) {
loggers[categoryName] = winston.loggers.add(categoryName, {
console: {
label: categoryName,
},
file: {
filename: './log/test.log',
label: categoryName,
},
});
}
return winston.loggers.get(categoryName);
};
しかし、次の警告が表示されます。
[winston] Attempt to write logs with no transports {"message":"yolo","
level":"info"}
これを実現するには、ログ関数のパラメータにフィールド「ラベル」を含むオブジェクトを追加します。例:
次の形式の場合:
const imLogFormat = printf(info => {
${info.timestamp} [${info.label}] ${info.level}: ${info.message}
返す;
});
次のことができます。
logger.error( '次のエラーが発生しました' + err、{label: "Class1"})
logger.error( '次のエラーが発生しました' + err、{label: "Class2"})