小编web*_*ket的帖子

是否可以包装 logrus.Logger 函数而不丢失行号前缀?

当使用包装的 logrus 函数/记录器时,记录器会使用记录器函数调用的文件名和行号作为所有日志行的前缀,例如:

INFO[0000]logging.go:39 myfolder/logging.Info()
Run Code Online (Sandbox Code Playgroud)

如果我像这样包装日志函数,例如:包日志记录

import (
    "fmt"
    "github.com/sirupsen/logrus"
    "os"
    "path"
    "runtime"
)

var (
    log *logrus.Logger
)

func init() {

    log = logrus.New()
    log.SetReportCaller(true)
    log.Formatter = &logrus.TextFormatter{
        CallerPrettyfier: func(f *runtime.Frame) (string, string) {
            filename := path.Base(f.File)
            return fmt.Sprintf("%s()", f.Function), fmt.Sprintf("%s:%d", filename, f.Line)
        },
    }
}

func Info(args ...interface{}) {
        log.Info(args...)
}
Run Code Online (Sandbox Code Playgroud)

该函数发出的每一行都将以调用的行号为前缀logging function。这符合预期,但所需的行为是每行都以调用的行的行号作为前缀Info

期望的输出应该是:

INFO[0000]myfile.go:39 myfolder/myfile.myfunction()
Run Code Online (Sandbox Code Playgroud)

有什么办法解决吗?

logging callstack go

5
推荐指数
1
解决办法
5119
查看次数

标签 统计

callstack ×1

go ×1

logging ×1