Logging 如何在登录到文件时禁用logrus中的字段名

Logging 如何在登录到文件时禁用logrus中的字段名,logging,go,Logging,Go,我在golang使用logrus登录到文件。现在,logrus正在使用字段名登录到文件 即 time=“26-03-2017 03:37:58”level=error msg=“非致命错误。不会停止执行” 如何删除字段名以使日志条目成为 ERRO 26-03-2017 03:37:58不致命。一个错误。不会停止执行 就像它在stderr中的行为一样?您需要编写一个自定义的格式化程序,它只发送您想要查看的字段 下面是一个例子: 键入MyJSONFormatter结构{ } log.SetForma

我在golang使用logrus登录到文件。现在,logrus正在使用字段名登录到文件

time=“26-03-2017 03:37:58”level=error msg=“非致命错误。不会停止执行”

如何删除字段名以使日志条目成为

ERRO 26-03-2017 03:37:58不致命。一个错误。不会停止执行


就像它在stderr中的行为一样?

您需要编写一个自定义的格式化程序,它只发送您想要查看的字段

下面是一个例子:

键入MyJSONFormatter结构{
}
log.SetFormatter(新的(MyJSONFormatter))
func(f*MyJSONFormatter)格式(entry*entry)([]字节,错误){
//注意:这不包括时间、级别和消息,这些信息在
//条目。有关这些字段的信息,请咨询“godoc”,或阅读
//官方伐木工人的来源。
序列化,err:=json.Marshal(entry.Data)
如果错误!=零{
返回nil,fmt.Errorf(“未能将字段封送到JSON,%v”,err)
}
返回append(序列化的,'\n'),nil
}

以下是如何获得您所要求的:

package main

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

type PlainFormatter struct {
    TimestampFormat string
    LevelDesc []string
}

func (f *PlainFormatter) Format(entry *log.Entry) ([]byte, error) {
    timestamp := fmt.Sprintf(entry.Time.Format(f.TimestampFormat))
    return []byte(fmt.Sprintf("%s %s %s\n", f.LevelDesc[entry.Level], timestamp, entry.Message)), nil
}

func main() {
    plainFormatter := new(PlainFormatter)
    plainFormatter.TimestampFormat = "2006-01-02 15:04:05"
    plainFormatter.LevelDesc = []string{"PANC", "FATL", "ERRO", "WARN", "INFO", "DEBG"}
    log.SetFormatter(plainFormatter)
    log.Errorln("Not fatal. An error. Won't stop execution")
    log.Infoln("Just some info")
}
  • 创建PlainFormatter结构(带有时间戳格式和级别字段)
  • 创建一个格式化函数/方法(其中您的结构是接收者)
  • 将logrus设置为使用自定义格式化程序
输出:

ERRO 2017-07-01 18:22:21 Not fatal. An error. Won't stop execution
INFO 2017-07-01 18:22:21 Just some info

在我的书中,您可以看到一个更实用的示例,说明如何在添加装饰功能一章中操作应用程序记录器。

感谢您提供这个示例。是否可以将其与
logrus.WithFields
一起使用?我试过了,但没有成功。而且,我不明白如果你不调用“Format”函数,它是如何工作的。我在
PLainFormatter
中又添加了一个字段,但它给了我一个错误。如何在日志中再添加一个字段?