Как войти в консоль 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.