我使用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版
7条答案
按热度按时间nhhxz33t1#
您尝试将JSON对象直接插入到字符串中,因此它将打印不带
JSON.stringify
的[Object Object]
。这个问题不能通过配置Winston来解决,因为这个问题发生在字符串生成时(在
logger.debug
函数实际读取它之前),所以console.log
调用将打印相同的内容。logger.*
函数的第一个参数是message(字符串),然后可以传递一个元数据对象(JSON)。要在
logFormat
函数中使用元数据,请按以下方式更新Logger示例:使用方法:
控制台输出:
日志文件输出(手工美化,参见传输文件格式中的注解):
希望这能解决你的问题。
重要提示:正如@Xetera在评论中指出的那样,“你应该确保你没有在任何地方记录人们的密码”
Code for this answer
ca1c2owp2#
您可以在日志记录器配置中使用
format.splat()
:...和使用字符串插值的日志对象:
5cnsuln73#
我的解决方案是使用这种格式化程序:
现在所有这些选项都按预期工作:
kx5bkwkv4#
我不得不合并@SherloxFR和@Anton提供的解决方案。
您可以看到我在上面的代码中将
format.splat()
和format.json()
添加到选项配置中。这就是我如何使用选项配置对象。你可以在transports数组中编写格式代码,但我不喜欢这种方式。反正这是你的选择。
在这样的配置之后,就是我在代码中使用它的方式
如果你愿意,你也可以这样传播它
就是这样。Winston应该用这个设置记录你的对象。
hm2xizp95#
如果您希望将对象记录到控制台和文件,可以执行以下操作:
1.初始化2种格式。一个用于文件,另一个用于控制台。注意
consoleFormat
中使用的JSON.stringify
方法2.现在,创建记录器。
3.仅在非生产环境中启用控制台日志记录:
4.将其导出为默认记录器
关于
logger.info("Server started listening", { port: 9000 } );
这个会打印出来
9gm1akwq6#
或者你就用
printf
函数与JSON.stringify配合使用
k5ifujac7#
winston-pretty将以一种强大而通用的方式解决这个问题。这是一个独立的程序,它将winston json log作为输入,并输出人类可读的日志行。它还可以打印json和错误。
https://www.npmjs.com/package/winston-pretty