【问题标题】:Is it possible to swap 'msg' for 'message' with logrus logging是否可以使用 logrus 日志记录将 'msg' 交换为 'message'
【发布时间】:2025-12-01 10:05:01
【问题描述】:

因此,当使用 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() 等的默认日志记录键?

【问题讨论】:

    标签: go logrus


    【解决方案1】:

    您可以使用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

    这是一个简短的例子(参见playground):

    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 上提供相同的覆盖。

    【讨论】:

      最近更新 更多