2023年11月29日发(作者:)
golang打印error的堆栈信息操作
众所周知,⽬前的golang error只关注Error()信息,⽽不关注它的堆栈路径,对错误的定位⼤多数通过
gs(ile| ags)
n(e)
⼀旦代码分层,为了定位错误,可能出现每⼀个层次的同⼀个error,都得log好⼏次,⽐如:
func DB()error{
return ("time out")
}
func Dao()error{
if er:= DB();er!=nil{
n(er)
return error
}
return nil
}
func Service()error{
if er:= Dao();er!=nil{
n(er)
return error
}
return nil
}
func Control()error{
利⽤golang⾃带包 runtime/debug 异常时打印
package main
import (
"fmt"
"os"
"runtime/debug"
"time"
)
func TryE() {
errs := recover()
if errs == nil {
return
}
exeName := [0] //获取程序名称
now := () //获取当前时间
pid := () //获取进程ID
time_str := ("25") //设定时间格式
fname := f("%s-%d-%", exeName, pid, time_str) //保存错误信息⽂件名:程序名-进程ID-当前时间(年⽉⽇时分秒)
n("dump to file ", fname)
f, err := (fname)
if err != nil {
return
}
defer ()
tring(f("%vrn", errs)) //输出panic信息
tring("========rn")
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。


发布评论