我已经开始使用 Go 登录,我遇到了这篇关于登录 Go 的文章https://www.goinggo.net/2013/11/using-log-package-in-go.html使用以下源代码(略有更改):var ( Trace *log.Logger Info *log.Logger Warning *log.Logger Error *log.Logger)func Init( traceHandle io.Writer, infoHandle io.Writer, warningHandle io.Writer, errorHandle io.Writer) { Trace = log.New(traceHandle, “TRACE: “, log.Ldate|log.Ltime|log.Lshortfile) Info = log.New(infoHandle, “INFO: “, log.Ldate|log.Ltime|log.Lshortfile) Warning = log.New(warningHandle, “WARNING: “, log.Ldate|log.Ltime|log.Lshortfile) Error = log.New(errorHandle, “ERROR: “, log.Ldate|log.Ltime|log.Lshortfile)}func main() { Init(ioutil.Discard, os.Stdout, os.Stdout, os.Stderr)}现在我想向此记录器生成的日志条目添加一些自定义信息,但它们不是常量字符串文字(如添加到那里INFO:或WARNING:)例如,我想添加触发日志的函数的名称。假设我有以下功能,我想为此使用:(来自此处)func _enter() { // Skip this function, and fetch the PC and file for its parent pc, _, _, _ := runtime.Caller(1) // Retrieve a Function object this functions parent functionObject := runtime.FuncForPC(pc) // Regex to extract just the function name (and not the module path) extractFnName := regexp.MustCompile(`^.*\.(.*)$`) fnName := extractFnName.ReplaceAllString(functionObject.Name(), "$1") fmt.Printf("Entering %s\n", fnName)}如何将其添加到记录器?
1 回答
潇湘沐
TA贡献1816条经验 获得超6个赞
最简单的答案当然是在编写日志记录行时输入它。许多图书馆实际上使用这样的约定
logger.Logf("myfilename.go:123" + "other logging info")
其中 123 是行号。这也可以由 ide 或编辑器编写脚本。
如果您更改
_enter()
为返回函数的名称,则其余部分将变得更加简单。您可以logger.SetPrefix()
在每个函数内部调用,根据您的示例代码,它们可能如下所示。Info.SetPrefix("INFO: " + _enter() + ":")
您可以将记录器包装在一个有助于自动执行上述操作的结构中,但您应该注意
_enter()
每次调用的开销。尽管此时,您可能想考虑使用具有更多功能的日志库。我对logrus有很好的经验,它可以替代标准库的日志包。
- 1 回答
- 0 关注
- 197 浏览
添加回答
举报
0/150
提交
取消