gpt4 book ai didi

go - 如何获取记录器的文件和函数名称

转载 作者:行者123 更新时间:2023-12-03 02:23:32 25 4
gpt4 key购买 nike

我正在使用logrus操作系统按预期工作,现在我们需要将文件和调用记录器的函数添加到记录器输出中,

我们需要它是这样的

文件log-ut-usage

func main(){


logs := lts.InitLogger("test","1","debug")

logs.Debugf("test 123")
....

}

这是所需的输出


{"file":"log-ut-usage/main.go:21","function":"main","level":"warn","test 123":"ddd","timestamp":"2019-10-02T09:21:39.309559Z"}

目前我们得到了该文件的文件及功能

文件logger.go

func InitLog(label string) LoggerI {

loggerImpl = &logrus.Logger{
Out: os.Stdout,
Level: level,
ReportCaller: true,
Formatter: &logrus.JSONFormatter{
TimestampFormat: timestampFormat,
CallerPrettyfier: func(f *runtime.Frame) (string, string) {
s := strings.Split(f.Function, ".")
funcname := s[len(s)-1]
_, filename := path.Split(f.File)
return funcname, filename
},
},
}

这是(不需要的)输出

{"file":"logger.go","func":"InitLog","level":"debug","msg":"test 123","time":"2019-10-02 12:21:39"}

我不想获取我们编码 json 格式化程序的文件 logger.go,我想获取使用记录器的文件。

最佳答案

您可以使用文件、函数和行信息包装记录器,然后使用它们。

这是一个示例( live ):

package main

import (
"os"
"runtime"
"strconv"
"strings"

log "github.com/sirupsen/logrus"
)

func init() {
log.SetFormatter(&log.JSONFormatter{})
log.SetOutput(os.Stdout)
}

func logger() *log.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:]
return log.WithField("file", filename).WithField("function", fn)
}

func test() {
logger().Info("Testing...")
}

func main() {
logger().Info("Testing...")
test()
}

输出:

{"file":"prog.go:34","function":"main","level":"info","msg":"Testing...","time":"2009-11-10T23:00:00Z"}
{"file":"prog.go:30","function":"test","level":"info","msg":"Testing...","time":"2009-11-10T23:00:00Z"}

关于go - 如何获取记录器的文件和函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58198896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com