如何使用新功能扩展 log api

我将以下代码与 , 一起使用logrus,并且我想扩展它,即在每次使用此 logrus 日志时,它都会默认添加 和 ,function 但file它不起作用


我有


{

  "level": "info",

  "msg": "info",

  "time": "2019-10-06 17:14:25"

}

我想


{

  "file": “myfile.go",

  "func": “myfunc:95",

  "level": "info",

  "msg": "info",

  "time": "2019-10-06 17:17:53"

}

我不是在谈论使用 ReportCaller: true,我只是想用我的功能扩展记录器


我该怎么做 ?


胡说叔叔
浏览 117回答 1
1回答

白衣染霜花

一种方法是使用WithFieldsandlogrus.Fields像这样:package mainimport (    "github.com/sirupsen/logrus"    "os"    "runtime"    "strconv"    "strings")func main() {    lgr().Log(logrus.InfoLevel, "info")}func lgr() *logrus.Entry {    pc, file, line, ok := runtime.Caller(1)    if !ok {        panic("Could not get context info for logger!")    }    filename := file[strings.LastIndex(file, "/")+1:] + ":" + strconv.Itoa(line)    funcname := runtime.FuncForPC(pc).Name()    fn := funcname[strings.LastIndex(funcname, ".")+1:]    loggerImpl := &logrus.Logger{        Out:   os.Stdout,        Hooks: nil,        Formatter: &logrus.JSONFormatter{            TimestampFormat: "2006-01-02 15:04:05",            PrettyPrint:     true,        },        Level:    logrus.InfoLevel,        ExitFunc: nil,    }    return loggerImpl.WithFields(logrus.Fields{        "file":     filename,        "function": fn,    })}上面的代码*logrus.Entry具有您期望从记录器获得的所有方法。您也可以使用该接口logrus.FieldLogger,但如果这样做,我们将需要坚持该接口上的方法(Log例如没有方法 - 必须使用信息/错误等)。package mainimport (    "github.com/sirupsen/logrus"    "os"    "runtime"    "strconv"    "strings")func main() {    lgr().Infoln("Hello world")}func lgr() logrus.FieldLogger {    pc, file, line, ok := runtime.Caller(1)    if !ok {        panic("Could not get context info for logger!")    }    filename := file[strings.LastIndex(file, "/")+1:] + ":" + strconv.Itoa(line)    funcname := runtime.FuncForPC(pc).Name()    fn := funcname[strings.LastIndex(funcname, ".")+1:]    loggerImpl := &logrus.Logger{        Out:   os.Stdout,        Hooks: nil,        Formatter: &logrus.JSONFormatter{            TimestampFormat: "2006-01-02 15:04:05",            PrettyPrint:     true,        },        Level:    logrus.InfoLevel,        ExitFunc: nil,    }    return loggerImpl.WithFields(logrus.Fields{        "file":     filename,        "function": fn,    })}输出:{  "file": "main.go:12",  "function": "main",  "level": "info",  "msg": "Hello world",  "time": "2019-10-07 01:24:10"}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go