优雅的实现golang异常及日志处理

本文介绍了如何在Golang中优雅地处理异常,特别是使用xerrors包进行堆栈异常处理,并探讨了go原生日志框架的局限性。接着详细讲解了midlog日志框架,包括其通用日志函数、对接原生框架、logrus和zap的能力,以及日志重定向和级别控制,以实现更高效的日志管理和分析。
摘要由CSDN通过智能技术生成

xerrors 异常

xerrors 包是一个非常棒的设计,不同于往常语言如java/php,因为go的errors只是一个string类型的映射,所以内存占用空间很少。这在golang的核心库和golang大多数开源模块中使用,简单,高效,稳定!比如:

var myErr:=errors.New("myrrh")
func act1()err{
     return myErr
}
    以上代非常高效,如果你经常做go的开发时。这种解决时经常会存在一个很头疼的问题,就是异常触发点很难定位,因为你很难去定位到异常发生的代码文件及行数和调用的堆栈,但出现问题时非常必要知道是什么情况处罚的这个异常,只是一个message不足以让开发人员去解决问题。
    在最新的xerrors包中,引入了一个caller堆地址,通过使用Format接口可以格式化出调用第一行的堆,但这往往很多时候不足以解决去定位问题。这时可以考虑使用第三方包,请继续往下看:)

堆栈异常处理

require github.com/pkg/errors latest
go mod download
package main

import(
    "fmt"
    "github.com/pkg/errors"
)

func act1()error{
   
    return errors.New("hello world!")
}

func main(){
   
	fmt.Printf("%+v\n",act1())
}

Output:

Hello world!
main.act1
/tmp/aa/main.go:9
main.main
/tmp/aa/main.go:13
runtime.main
/usr/local/Cellar/go/1.13.4/libexec/src/runtime/proc.go:203
runtime.goexit
/usr/local/Cellar/go/1.13.4/libexec/src/runtime/asm_amd64.s:1357

以上代码中,首先引用pkg/errrors堆异常包,然后通过使用%+v格式化error,将堆栈数据打印到屏幕中,通过这种方式,通过调用堆栈你可以快速定位异常的代码位置,从而快速解决问题。

go原生日志框架

  glog是Golang log的缩写,开源于golang核心库,所以应用比较广泛实现如下:
package main
import "log"

func main(){
   
log.Println(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值