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")

以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。