Winstonをバックエンドのロギングに使用しています。JSON.stringify
を使用しないとオブジェクトをログに記録できません。
logger.debug(`Register ${JSON.stringify(req.body)}`)
const logger: Logger = createLogger({
// change level if in dev environment versus production
level: env === 'production' ? 'info' : 'debug',
format: format.combine(
format.label({label: path.basename(process.mainModule.filename)}),
format.timestamp({format: 'YYYY-MM-DD HH:mm:ss'}),
format.prettyPrint()
),
transports: [
new transports.Console({
format: format.combine(format.colorize(), logFormat),
}),
new transports.File({
filename,
format: format.combine(format.json()),
}),
],
exitOnError: false,
})
Winstonでオブジェクトをログに記録する方法を教えてください。バージョン3.2.1を使用しています
@SherloxFRと@Antonが提供するソリューションを組み合わせる必要がありました。
_const Winston = require('winston');
const { format } = Winston;
const options = {
file: {
....
format: format.combine(
format.splat(),
format.json()
),
...
},
console: {
...
format: format.combine(
format.splat(),
format.json()
),
...
}
};
_
上記のコードのオプション設定にformat.splat()
とformat.json()
の両方を追加したことがわかります。
_const logger = new Winston.createLogger({
transports: [
new Winston.transports.File(options.file),
new Winston.transports.Console(options.console)
],
exitOnError: false // do not exit on handled exceptions
});
_
このようにして、オプション構成オブジェクトを使用しました。トランスポート配列内にフォーマットコードを実際に書き込むことができますが、私はそのように好きではありません。とにかくそれはあなたの選択です。
そのような構成の後、これが私のコードでの使用方法です
_let myObj = {
name: "StackOverflow",
};
logger.info('Content: %o', myObj);
_
必要に応じて、このように広げることもできます
_logger.info('Content: %o', {...myObj});
_
それで全部です。 Winstonはこの設定でオブジェクトをログに記録する必要があります。