golang logrus 记录错误堆栈_关于收集,标准化和集中化处理Golang日志的一些建议

本文介绍了Golang中日志库的选择,如logrus、glog和标准库,并重点讲解了logrus的使用,包括基本用法、自定义字段、Hook接口。同时,提出了日志写入和存储的最佳实践,如使用唯一ID跟踪微服务日志和将日志写入文件后再集中处理。
摘要由CSDN通过智能技术生成

e431abebe3326da31cc1ae30c193c681.png

依赖分布式系统的公司组织和团队经常使用Go语言编写其应用程序,以利用Go语言诸如通道和goroutine之类的并发功能。如果你负责研发或运维Go应用程序,则考虑周全的日志记录策略可以帮助你了解用户行为,定位错误并监控应用程序的性能。

这篇文章将展开聊一些用于管理Go日志的工具和技术。我们将首先考虑要使用哪种日志记录包来满足各种记录要求。然后会介绍一些使日志更易于搜索和可靠,减少日志资源占用以及使日志消息标准化的技术。

日志包的选择

Go标准库的日志库非常简单,仅仅提供了print,panicfatal三个函数对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持. 所以催生了很多第三方的日志库,流行的日志框架包括logruszapglog等。我们先来大致看下这些日志库的特点再来根据实际应用情况选择合适的日志库。

log标准库

Go的内置日志记录库(log)带有一个默认记录器(logger),该记录器可写入标准错误并自动向记录中添加时间戳,而无需进行配置。你可以使用它日志用于本地开发,和试验性的代码段。这时从代码中获得快速反馈可能比生成丰富结构化的日志更为重要。

logrus

logrus是一个为结构化日志记录而设计的日志记录包,非常适合以JSON格式记录日志。 JSON格式使机器可以轻松解析Go日志。而且,由于JSON是定义明确的标准,因此通过包含新字段可以轻松地添加上下文,解析器能够自动提取它们。

使用logrus,可以使用功能WithFields定义要添加到JSON日志中的标准字段,如下所示。然后,可以在不同日志级别调用记录器,例如Info()Warn()Error()logrus库将自动以JSON格式写入日志,并插入标准字段以及您即时定义的所有字段。

package main
import (
  log "github.com/sirupsen/logrus"
)

func main() {
    
   log.SetFormatter(&log.JSONFormatter{})

   standardFields := log.Fields{
    
     "hostname": "staging-1",
     "appname":  "foo-app",
     "session":  "1ce3f6v",
   }
   requestLogger := log.withFields(standardFields)
   requestLogger.WithFields(log.Fields{
    "string": "foo", "int": 1, "float": 1.1}).Info("My first ssl event from Golang")

}

生成的日志将在JSON对象中包括消息,日志级别,时间戳、标准字段以及调用记录器即时写入的字段:

{
    "appname":"foo-app","float":1.1,"hostname":"staging-1","int":1,"level":"info","msg":"My fir
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值