NodeJS 如何将JSON记录到控制台并使cloudwatch日志拾取正确的元数据?

wpcxdonn  于 2023-06-05  发布在  Node.js
关注(0)|答案(2)|浏览(420)
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: truestringify: true

cxfofazt

cxfofazt1#

这不是winston的问题。
我使用pm2来运行node,我需要向它传递--raw arg来获取原始日志。

iugsix8n

iugsix8n2#

如果你仍然在努力解决这个问题,有一个npm包可能会帮助你,一个名为console-log-json的console.log的替代品。它的好处是它将创建一致的JSON格式的日志,尽管你可以在console.log()中以任何顺序抛出任何数量的参数,包括其他JSON对象以及Error对象和普通字符串。
它还处理自动添加一些额外的有用属性,如时间戳和从何处调用console.log()的文件等。
这些都被打印到STDOUT,因此任何日志传送和聚合器都可以提取并解析JSON。

相关问题