美文网首页
Go语言错误日志打印

Go语言错误日志打印

作者: golang推广大使 | 来源:发表于2019-05-21 01:31 被阅读0次

    在日常开发中,报错信息的打印对于程序的调试具有重要意义。本文将介绍一种帮助大家快速定位错误的方案。

    第三方errors库

    github.com/pkg/errors 是一个对标准库的error进行了封装的第三方库,他对外提供了对标准库的error的三种不同方式的封装。

    WithMesageWithMessagef函数

    这两个函数用于给现有的error添加报错信息。他们之间最大的区别在于WithMessagef可以根据格式化信息进行格式化。

    WrapWrapf函数

    这两个函数主要用于给原有错误添加上下文环境,并记录一个调用栈。其中Wrapf函数用于指定格式添加上下文信息

    WithStack函数

    主要给原有错误添加调用栈,这样将来打印的时候就可以用%+v来打印整个调用栈

    示例代码

    package main
    
    import (
        "errors"
        "log"
    
        pkgerr "github.com/pkg/errors"
    )
    
    func main() {
        log.Printf("%+v", deep3()) //with stack
        err2 := msg2()
        log.Printf("%+v", err2) //no stack
        log.Printf("%+v", pkgerr.WithStack(err2))
    }
    func deep3() error {
        return deep2()
    }
    
    func deep2() error {
        return pkgerr.Wrap(deep1(), "deep2")
    }
    
    func deep1() error {
        return errors.New("deep1")
    }
    
    func msg() error {
        return errors.New("msg")
    }
    
    func msg2() error {
        return pkgerr.WithMessage(msg(), "msg2")
    
    }
    
    

    打印结果如下

    2019/05/21 01:22:17 deep1
    deep2
    main.deep2
            /Users/baoyangc/code/goprojs/base/src/base/main/main.go:21
    main.deep3
            /Users/baoyangc/code/goprojs/base/src/base/main/main.go:17
    main.main
            /Users/baoyangc/code/goprojs/base/src/base/main/main.go:11
    runtime.main
            /Users/baoyangc/.gvm/gos/go1.12.5/src/runtime/proc.go:200
    runtime.goexit
            /Users/baoyangc/.gvm/gos/go1.12.5/src/runtime/asm_amd64.s:1337
    2019/05/21 01:22:17 msg
    msg2
    2019/05/21 01:22:17 msg
    msg2
    main.main
            /Users/xxxxx/code/goprojs/base/src/base/main/main.go:14
    runtime.main
             /Users/xxxxx/.gvm/gos/go1.12.5/src/runtime/proc.go:200
    runtime.goexit
             /Users/xxxxx/.gvm/gos/go1.12.5/src/runtime/asm_amd64.s:1337
    

    相关文章

      网友评论

          本文标题:Go语言错误日志打印

          本文链接:https://www.haomeiwen.com/subject/hwprzqtx.html