kazaana
error tracking for go
由于发生error时的调用栈输出只截止上一个函数入口, 如果打印的error
已经通过多个函数函数传递...头皮发麻
阿库娅大人说: "今天能敲代码就今天敲吧,反正明天也不一定学去敲,如果敲不了,最后咕咕咕就是了!"
我老婆说: "我讨厌的事有三件『办不到、好累、好麻烦』这三句话非常不好, 会抹杀人类所拥有的无限可能。"
那干脆自己针对发生error
的地方保存调用栈, 在后续回调中依然可以找到出错位置
每次输出时附带error
捕获的时间, 格式为2006-01-02 15:04:05 .UnixNano()
调用栈输出格式参考了vscode
下的输出形式
因为不想为nil
判断烦恼, 所以使用了结构体
速食一览
运行go test
即可预览输出效果
error happen:
2020-02-18 22:05:37 1582034737352519000
parsing time "1970-01-01 08:00:00" as "2006-01-02 15:04:051": cannot parse "" as "1"
/Users/m_quadra/go/src/github.com/m_quadra/kazaana/test/main.go:29 +0x10a188d
/Users/m_quadra/go/src/github.com/m_quadra/kazaana/test/main.go:20 +0x10a1633
/Users/m_quadra/go/src/github.com/m_quadra/kazaana/test/main.go:11 +0x10a1634
/usr/local/go/src/runtime/proc.go:203 +0x102acbd
/usr/local/go/src/runtime/asm_amd64.s:1357 +0x1053080
食用指北
休整
kazaana.Config.FirstCallers(5)
首次捕获错误信息时保存的调用栈层数, 默认为5
kazaana.Config.Header("error happen:")
自定义头部文字, 后续可能会改为具体方法, 目前还没有必要
动工
kazaana.New(err)
构建新的kazaana.Error
, 并保存当前调用栈信息
kerr := kazaana.Error{}
kerr.HasError()
kerr.HasError("[optional]:")
检查是否发生错误, 若是, 则输出错误信息
可自定义输出的临时头部文字
kerr := kazaana.Error{}
kerr.CheckError()
检查是否发生错误, 无输出, 用于kazaana.Error
传递过程中的检查
kazaana.HasError(err)
kazaana.HasError(err, "[optional2]:")
检查error
是否发生错误, 若是, 则输出错误信息
第二参数为可选的临时头部文字
kerr.RawError()
获取原始error
errStr := kerr.Error()
获取原始错误信息, 适用于需要对错误进行分类处理的场景, 内置了nil
判断
填坑
填坑记录