winston.info('Hello again distributed logs', { app: 'test', sid: 1 })
pino.info('Hello again distributed logs', { app: 'test', sid: 1 })
输出:
{"app":"test","sid":1,"level":"info","message":"Hello again distributed logs","timestamp":"2017-02-16T03:34:06.186Z"}
{"pid":4269,"hostname":"Macchiato.local","level":30,"time":1487216046197,"msg":"Hello again distributed logs {\"app\":\"test\",\"sid\":1}","v":1}
我有fluentd守护进程来拾取容器stdout并将其发送到cloudwatch。
在上面的示例中,cloudwatchlogs可以正确地从pino中检测元数据,我将能够像这样查询日志
{$.app = "test"}
然而,温斯顿控制台不是这样工作的,一切都推到log
属性。
有谁知道怎么解决这个问题。我使用winston控制台和json: true
和stringify: true
2条答案
按热度按时间cxfofazt1#
这不是
winston
的问题。我使用
pm2
来运行node,我需要向它传递--raw
arg来获取原始日志。iugsix8n2#
如果你仍然在努力解决这个问题,有一个npm包可能会帮助你,一个名为console-log-json的console.log的替代品。它的好处是它将创建一致的JSON格式的日志,尽管你可以在console.log()中以任何顺序抛出任何数量的参数,包括其他JSON对象以及Error对象和普通字符串。
它还处理自动添加一些额外的有用属性,如时间戳和从何处调用console.log()的文件等。
这些都被打印到STDOUT,因此任何日志传送和聚合器都可以提取并解析JSON。