首页 > 解决方案 > 将 JSON 记录到 DataDog 日志消息字段

问题描述

我希望能够将日志发送到 datadog 并使消息成为 JSON 对象而不是字符串。

除非创建了一个方面,否则元数据字段是不可搜索的,我想避免这样做。

我目前正在使用winston + winston-datadog-logs-transporter发送日志。

如果我这样做:logger.info(JSON.stringify(message)),datadog 将消息记录为空白并将字符串化消息添加为元数据。

如果我这样做: logger.info('foo' + JSON.stringify(message),那么该消息将被解释为一个字符串,我可以对其进行搜索。

如果我这样做: logger.info('foo', message),则正文设置为foo并被message解释为元数据,如果不创建构面,我将无法搜索。

任何帮助表示赞赏,谢谢!

标签: node.jsloggingwinstondatadog

解决方案


这对我有用:

const { createLogger, format, transports } = require('winston')
const { combine, timestamp, json } = format

function dataDogLogger(options) 
{
    const logger = createLogger({
        exitOnError: false,
        format: combine(
            // add a timestamp to all logs
            timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
            json()
        ),
        transports: [ ...whatever you need here... ]
    })

    return logger
}

module.exports = dataDogLogger

推荐阅读