相关文章推荐
温柔的上铺  ·  大学生必备软件免费自学视频教程,让那些培训班 ...·  11 月前    · 
爽快的手电筒  ·  雷诺发布两款混动车型 百公里油耗仅1.5L|皆电·  2 年前    · 
逆袭的菠萝  ·  王嘉尔再曝新视频,绯闻女友宋雨琦回韩国后,又 ...·  2 年前    · 
文武双全的热带鱼  ·  每日热点科普:美国最奇葩的沙雕全在这,每个都 ...·  2 年前    · 
帅呆的汉堡包  ·  江浙沪最适合秋季的团建活动大合集丨值得收藏 ...·  2 年前    · 
Code  ›  Go错误日志设计:多行堆栈跟踪信息开发者社区
runtime 堆栈
https://cloud.tencent.com/developer/article/2311644
博学的豌豆
1 年前
运维开发王义杰

Go错误日志设计:多行堆栈跟踪信息

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
运维开发王义杰
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > Go错误日志设计:多行堆栈跟踪信息

Go错误日志设计:多行堆栈跟踪信息

作者头像
运维开发王义杰
发布 于 2023-08-10 17:45:04
812 0
发布 于 2023-08-10 17:45:04
举报
文章被收录于专栏: 运维开发王义杰

在开发Go应用程序时,错误处理和日志记录是至关重要的任务。堆栈跟踪信息能帮助我们追踪到错误的源头,但是在默认设置下,Go的错误日志(包括堆栈跟踪)会被打印在一行,这使得日志难以阅读。本文将指导介绍如何让Go的错误日志分多行显示,以改善可读性,类似于Java的错误堆栈跟踪。

自定义logrus日志格式

logrus库允许我们自定义日志格式。我们可以创建一个自定义的日志格式(Formatter),在这个格式中,我们可以将每一个堆栈帧打印在新的一行。

首先,我们定义一个新的 Formatter 结构体,并实现 logrus.Formatter 接口的 Format 方法。在这个方法中,我们首先将日志条目的基本信息(时间、级别、消息)打印出来,然后检查 error 字段,如果这个字段存在,并且其值是一个 error 类型,我们就打印出这个错误的堆栈信息。

代码语言: javascript
复制
package main
import (
  "fmt"
  "strings"
  "time"
  "github.com/pkg/errors"
  "github.com/sirupsen/logrus"
type CustomFormatter struct{}
func (f *CustomFormatter) Format(entry *logrus.Entry) ([]byte, error) {
  // Start with the standard log entry format: time, level, message.
  output := fmt.Sprintf("%s [%s] %s\n", entry.Time.Format(time.RFC3339), strings.ToUpper(entry.Level.String()), entry.Message)
  // If this log entry has an error field and it's an error, print its stack trace.
  if err, ok := entry.Data[logrus.ErrorKey].(error); ok {
    output += fmt.Sprintf("%+v\n", err)
  return []byte(output), nil
func main() {
  logrus.SetFormatter(new(CustomFormatter))
  err := errors.Wrap(errors.New("this is an error"), "error occurred")
  if err != nil {
    logrus.Errorf("something wrong: %+v", err)
}

运行这段代码,你会看到以下输出:

代码语言: javascript
复制
2023-07-10T12:55:47+08:00 [ERROR] something wrong: this is an error
main.main
  d:/src/golang/demo/errdemo/main.go:28
runtime.main
  C:/Program Files/Go/src/runtime/proc.go:255
runtime.goexit
  C:/Program Files/Go/src/runtime/asm_amd64.s:1581
error occurred
main.main
 
推荐文章
温柔的上铺  ·  大学生必备软件免费自学视频教程,让那些培训班都见鬼去吧-CSDN博客
11 月前
爽快的手电筒  ·  雷诺发布两款混动车型 百公里油耗仅1.5L|皆电
2 年前
逆袭的菠萝  ·  王嘉尔再曝新视频,绯闻女友宋雨琦回韩国后,又在家中密会俩美女_黄旭熙_恋情_回应
2 年前
文武双全的热带鱼  ·  每日热点科普:美国最奇葩的沙雕全在这,每个都超出你想象力!|佛州|达尔文|麦克唐纳|佛罗里达州_网易订阅
2 年前
帅呆的汉堡包  ·  江浙沪最适合秋季的团建活动大合集丨值得收藏 - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号