我使用这样的全局记录器:
[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")
}
这里是我想要的主要功能:
[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
如何获取调用记录器的正确文件?
答案 0 :(得分:3)
您需要使用原始logger.Printf
函数,而不是使用logger.Output
,并为调用点提供正确的callDepth
(默认值为2)。
如果查看Logger.Printf
的代码,您可以看到默认情况下它是如何完成的:
func (l *Logger) Printf(format string, v ...interface{}) {
l.Output(2, fmt.Sprintf(format, v...))
}