Как войти в консоль JSON и получить в журналах cloudwatch правильные метаданные?

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}

У меня есть свободный демон, чтобы забрать стандартный контейнер и отправить его в Cloudwatch.

В приведенном выше примере cloudwatchlogs может правильно определять метаданные из pino, и я смогу запросить журнал, как это

{$.app = "test"}

Тем не менее, консоль Winston не работает так, и все получило толчок к log приписывать.

Кто-нибудь знает, как это исправить. Я использую консоль Winston с json: true а также stringify: true

2 ответа

Решение

Оказывается, это не проблема с winston,

я использую pm2 запустить узел и мне нужно пройти --raw аргументируйте это, чтобы получить сырой журнал.

Если вы все еще боретесь с этим, вам может помочь пакет npm — замена console.log под названием console-log-json . Самое приятное в этом то, что он создает согласованные журналы в формате JSON, несмотря на то, что вы можете передавать в console.log() любое количество параметров в любом порядке, включая другие объекты JSON, а также объекты Error и простые строки.

Он также автоматически добавляет некоторые дополнительные полезные атрибуты, такие как отметки времени и файл, из которого был вызван console.log(), и т. д.

Все они выводятся на STDOUT, поэтому любой поставщик журналов и агрегатор могут их получить и проанализировать JSON.

Другие вопросы по тегам