2

因此,当使用 Logrus 时,我需要日志输出具有message密钥而不是msg密钥,但是当我使用下面的代码时,我得到了两者,但msg都是空的,如何将 logrus 配置为使用“消息”而不是“消息”?

contextLogger.WithField("logger_name",topic).WithField("message",messageString).Info()

这是留空时的日志输出.Info()//.Info()日志到msg

"logger_name": "logger","message": "log message","msg": "","time": "2020-08-12T15:14:48Z"

我想要的是能够使用.Info(message)和拥有

"logger_name": "logger","message": "log message","time": "2020-08-12T15:14:48Z"

是否可以更改 .Info() 等的默认日志记录键?

4

1 回答 1

3

您可以使用JSonFormatterFieldMap的字段来执行此操作:

    // FieldMap allows users to customize the names of keys for default fields.
    // As an example:
    // formatter := &JSONFormatter{
    //      FieldMap: FieldMap{
    //       FieldKeyTime:  "@timestamp",
    //       FieldKeyLevel: "@level",
    //       FieldKeyMsg:   "@message",
    //       FieldKeyFunc:  "@caller",
    //    },
    // }
    FieldMap FieldMap

这允许您覆盖默认字段名称,包括msg.

这是一个简短的例子(见在操场上):

package main

import (
    log "github.com/sirupsen/logrus"
)

func main() {
    log.SetFormatter(&log.JSONFormatter{
        FieldMap: log.FieldMap{
            log.FieldKeyMsg: "message",
        },
    })

    log.WithField("logger_name", "topic2").Info("this is my message")
}

输出:

{"level":"info","logger_name":"topic2","message":"this is my message","time":"2009-11-10T23:00:00Z"}

TextFormatter上提供了相同的覆盖。

于 2020-08-13T14:54:59.333 回答