猿问

当我在 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

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


一只名叫tom的猫
浏览 160回答 1
1回答

摇曳的蔷薇

logger.Printf您需要使用原始logger.Output函数,而不是使用,并提供正确callDepth的调用点(默认为 2)。如果您查看 的代码Logger.Printf,您可以看到默认情况下它是如何完成的:func (l *Logger) Printf(format string, v ...interface{}) {    l.Output(2, fmt.Sprintf(format, v...))}
随时随地看视频慕课网APP

相关分类

Go
我要回答