将结果堆栈跟踪默认写入文件

时间:2016-10-19 15:13:33

标签: logging go stack-trace

我在我的程序中使用logger,如下所示:

var (
    logFile *os.File
    Info    *log.Logger
)

func init() {
    var err error
    logFile, err = os.OpenFile("/my/file/with.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
    if err != nil {
        fmt.Printf("Cannot open log file error:%s. Program was terminated.", err)
        os.Exit(1)
    }
    Info = log.New(logFile,
        "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
 }

现在我想从stackTrace中写入所有信息,如果这些信息发生在panic()到我的日志文件中。现在,如果有些错误,所有这些信息都会在我的IDE中打印到控制台,但是如果porgram在服务器上工作,我会丢失信息,如果发生了一些空指针,错误的传递参数到函数,这就是为什么我想把这些信息写入日志文件。 有可能的 ?

1 个答案:

答案 0 :(得分:0)

使用syscall.Dup2将打开的文件链接到标准流

func main() {
   syscall.Dup2(int(logFile.Fd()), 2)
}

或创建恐慌处理程序

defer func() {
        err := recover()
        if err != nil {
            //...
        }
    }()