是否可以使用 logrus 日志记录将“msg”替换为“message”

M_K*_*M_K 2 go logrus

因此,当使用 Logrus 时,我需要日志记录输出具有 keymessage而不是msgkey,但是当我使用下面的代码时,我得到了两者,但msg为空,如何配置 logrus 以使用“message”而不是“msg”?

contextLogger.WithField("logger_name",topic).WithField("message",messageString).Info()
Run Code Online (Sandbox Code Playgroud)

.Info()这是将空的日志输出.Info()msg键时的日志输出

"logger_name": "logger","message": "log message","msg": "","time": "2020-08-12T15:14:48Z"
Run Code Online (Sandbox Code Playgroud)

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

"logger_name": "logger","message": "log message","time": "2020-08-12T15:14:48Z"
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*arc 5

您可以使用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
Run Code Online (Sandbox Code Playgroud)

这允许您覆盖默认字段名称,包括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")
}
Run Code Online (Sandbox Code Playgroud)

输出:

{"level":"info","logger_name":"topic2","message":"this is my message","time":"2009-11-10T23:00:00Z"}
Run Code Online (Sandbox Code Playgroud)

TextFormatter上也可以进行相同的覆盖。