gpt4 book ai didi

go - 当我在 go 中包装记录器时如何获得正确的文件?

转载 作者:IT王子 更新时间:2023-10-29 01:06:10 24 4
gpt4 key购买 nike

我使用这样的全局记录器:

[root@dev log]# cat src/logging/logging.go 
package logging

import (
"log"
"os"
)

var Logger *log.Logger

func init() {
Logger = log.New(os.Stdout, "[Debug]", log.Llongfile|log.LstdFlags)
}

func Debug(format string, v ...interface{}) {
Logger.SetPrefix("[Debug] ")
Logger.Printf(format, v...)
}

[root@dev log]# cat src/main/main.go
package main

import "logging"

func main() {
logging.Debug("in main")
}

在main函数中我想得到:

[Debug] 2015/12/10 22:20:23 /tmp/log/src/main/main.go:6: in main

但我得到以下输出:

[Debug] 2015/12/10 22:20:23 /tmp/log/src/logging/logging.go:16: in main

如何获取调用记录器的正确文件?

最佳答案

您需要使用原始的 logger.Output 函数,而不是使用 logger.Printf,并为调用提供正确的 callDepth点(默认为 2)。

如果您查看 Logger.Printf 的代码,你可以看到它是如何默认完成的:

func (l *Logger) Printf(format string, v ...interface{}) {
l.Output(2, fmt.Sprintf(format, v...))
}

关于go - 当我在 go 中包装记录器时如何获得正确的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34204283/

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