zerolog日志高級使用

使用github.com/pkg/errors打印詳細(xì)的堆棧信息,輸出非常友好。

設(shè)置堆棧打印詳細(xì)調(diào)用過程

zerolog.ErrorStackMarshaler = pkgerrors.MarshalStack

輸出詳細(xì)的堆棧信息

package main

import (
    "github.com/pkg/errors"
    "github.com/rs/zerolog"
    "github.com/rs/zerolog/log"
    "github.com/rs/zerolog/pkgerrors"
     "github.com/thinkeridea/go-extend/exbytes"
    "github.com/thinkeridea/go-extend/exstrings"
    "os"
    "strconv"
)

func C() error {
    _, err := os.Open("err")
    if err != nil {
        return errors.WithStack(err)
    }
    return nil
}

func B() error {
    return C()
}
func A() error {
    return B()
}
func init() {

    log.Logger = zerolog.New(os.Stderr).
        With().Timestamp().Stack().CallerWithSkipFrameCount(2).Logger()
    zerolog.CallerMarshalFunc = func(file string, line int) string {
        return WashPath(file) +":"+ strconv.Itoa(line)
    }
    // 使用官方提供的,輸出更友好
    zerolog.ErrorStackMarshaler = pkgerrors.MarshalStack
}

func main() {
    err := A()
    if err != nil {
        log.Error().Stack().Err(err).Msg("")
    }
}
// 路徑脫敏
func WashPath(s string) string {
    sb := exstrings.Bytes(s)
    path, _ := os.Getwd()
    pathByte := exbytes.Replace([]byte(path+"/"), []byte("\\"), []byte("/"), -1)
    root := os.Getenv("GOROOT")
    rootByte := exbytes.Replace([]byte(root+"/"), []byte("\\"), []byte("/"), -1)
    sb = exbytes.Replace(sb, pathByte, []byte(""), -1)
    sb = exbytes.Replace(sb, rootByte, []byte(""), -1)
    return exbytes.ToString(sb)
}

效果

{
    "level":"error",
    "stack":[
        {
            "func":"C",
            "line":"17",
            "source":"main.go"
        },
        {
            "func":"B",
            "line":"23",
            "source":"main.go"
        },
        {
            "func":"A",
            "line":"26",
            "source":"main.go"
        },
        {
            "func":"main",
            "line":"51",
            "source":"main.go"
        },
        {
            "func":"main",
            "line":"203",
            "source":"proc.go"
        },
        {
            "func":"goexit",
            "line":"1373",
            "source":"asm_amd64.s"
        }
    ],
    "error":"open err: The system cannot find the file specified.",
    "time":"2020-03-27T20:15:03+08:00",
    "caller":"zerolog_errors/main.go:55"
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容