当前位置: 首页 > wzjs >正文

招聘网站建设深圳运营培训班学费大概多少

招聘网站建设深圳,运营培训班学费大概多少,石家庄哪里能制作网站,如何在线制作印章背景 我们的日志接入阿里云sls平台,但是,日志是以json的格式存储在阿里云sls平台上,程序中产生的error,info等日志都可以实现以json的格式打印。但是,golang程序中产生的panic信息本身不是以json的格式输出,这就导致p…

背景

我们的日志接入阿里云sls平台,但是,日志是以json的格式存储在阿里云sls平台上,程序中产生的error,info等日志都可以实现以json的格式打印。但是,golang程序中产生的panic信息本身不是以json的格式输出,这就导致panic信息在阿里云sls平台上不方便检索。

基于上述痛点,我们期望捕获程序的panic信息,并且以json的格式打印,如此,我们就可以方便的实现在阿里云sls平台上检索的目的。

解决方案

核心的思路

通过deferrecover()机制捕获panic信息,结合Go的JSON序列化能力,将堆栈信息、错误内容等关键数据封装为结构化JSON格式。

实现步骤

定义日志的结构体

日志结构体定义:

type PanicLog struct {Timestamp string `json:"@timestamp"`Level     string `json:"level"`Message   string `json:"message"`Stack     string `json:"stack"`Service   string `json:"service"`
}

 封装打印日志的方法

func logPanicAsJSON(panicObj interface{}) {stack := string(debug.Stack()) // 获取完整堆栈logEntry := PanicLog{Timestamp: time.Now().Format(time.RFC3339),Level:     "PANIC",Message:   fmt.Sprintf("%v", panicObj),Stack:     stack,Service:   "your-service-name",}jsonData, _ := json.Marshal(logEntry)// 输出到SLS(根据实际日志库选择方式)log.Println(string(jsonData) )
}

封装方法捕获panic

defer func() {if r := recover(); r != nil {logPanicAsJSON(r) // 记录 panic 信息c.AbortWithStatus(http.StatusInternalServerError)}
}()

测试案例

package mainimport ("encoding/json""fmt""log""os""runtime/debug""time"
)type PanicLog struct {Timestamp string `json:"@timestamp"`Level     string `json:"level"`Message   string `json:"message"`Stack     string `json:"stack"`Service   string `json:"service"`
}func main() {defer func() {if r := recover(); r != nil {// 捕获panic信息并转换为JSONlogPanicAsJSON(r)os.Exit(1)}}()// 业务代码...testPanic()time.Sleep(1 * time.Second)
}func testPanic() {// nil指针引发panicvar a *int*a = 1
}func logPanicAsJSON(panicObj interface{}) {stack := string(debug.Stack()) // 获取完整堆栈logEntry := PanicLog{Timestamp: time.Now().Format(time.RFC3339),Level:     "PANIC",Message:   fmt.Sprintf("%v", panicObj),Stack:     stack,Service:   "your-service-name",}jsonData, _ := json.Marshal(logEntry)// 输出到SLS(根据实际日志库选择方式)log.Println(string(jsonData))
}

注意事项

在Go语言里,recover() 函数只能捕获当前goroutine内产生的 panic

所以,在下面的这个案例中recover不能捕获到panic信息。如果需要捕获到,需要在每个协程中都执行recover的逻辑。

func main() {defer func() {if r := recover(); r != nil {// 捕获panic信息并转换为JSONlogPanicAsJSON(r)os.Exit(1)}}()// 业务代码...go func() {testPanic()}()time.Sleep(1 * time.Second)
}

扩展优化

日志结构体中增加traceId信息维度。

http://www.dtcms.com/wzjs/336555.html

相关文章:

  • 顺义广州网站建设佛山竞价账户托管
  • 作文网投稿西安seo优化培训机构
  • b2b大型网站建设美发培训职业学校
  • 优秀企业网站欣赏营销推广计划书
  • 直播app定制开发seo白帽优化
  • 产品展示网站模板下载网站seo在线诊断
  • 衡水建设网站关键词排名提高
  • 合肥大型网站设计公网站源码交易平台
  • 怎么样做公司网站产品质量推广营销语
  • 网站有些什么内容网页设计的流程
  • 深圳住房和建设局网站 龙华必应搜索引擎怎么样
  • 电子商务网站建设的工具网络推广网站的方法
  • 三级网站域名解析网站优化公司开始上班了
  • 漳州疫情最新通知青岛谷歌优化公司
  • 有知道做网站的吗厦门seo外包平台
  • 沈阳个人网站制作大数据推广公司
  • 做网站公司青浦bing搜索国内版
  • 盐城专业做网站的公司怎样查询百度收录和排名情况
  • 做网站的介绍百度小说排行榜前十
  • 许昌大成建设集团网站品牌运营具体做什么
  • 网站做外链好嘛女教师遭网课入侵直播录屏曝光视频
  • 创意设计师是做什么的德州seo优化
  • 创建网站公司 徐州清远疫情防控措施
  • 快速建设一个网站西安百度关键词排名服务
  • 网站提速国外友链买卖平台
  • 经常会更换网站域名请收藏口碑营销案例2021
  • 网站建设相关新闻北京网络优化
  • 网站制作的语言seo网站优化培训多少价格
  • 餐饮加盟网站建设广告优化师是做什么的
  • 个人 可以做网站备案吗百度热搜关键词