当我将记录器包装进去时,如何获取正确的文件?

时间:2015-12-10 14:22:40

标签: go

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

[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

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

1 个答案:

答案 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...))
}