- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
之前一篇文章介绍了 日志库zap https://www.cnblogs.com/zichliang/p/17311480.html 毋庸置疑,zap库无论是Golang在项目中 还是生产中都极其优秀的一个数据库,而且他是当今Go最快的日志库 性能最高的日志库。 但是今天缺不是来说他的,今天介绍的是另一款日志库 logrus 虽然 logrus 已经不维护 且不更新,但是个人感觉logrus比zap 要好用很多,不是说性能,是使用的简易程度而言.
首先贴上github 地址:
https://github.com/sirupsen/logrus 。
logrus相比较zap 没有完整的日志库级别 但是比起自带的logger还是要丰富很多 一共有七种日志库级别 Trace, Debug, Info, Warning, Error, Fatal, Panic.
性能:相别zap 略逊一筹 。
结构化而言:日期时间,级别,信息 。
而他的优缺点则更为明显:
go get -u github.com/sirupsen/logrus
package test
import (
"github.com/sirupsen/logrus"
"os"
"testing"
)
func init() {
logrus.SetReportCaller(false)
logrus.SetFormatter(&logrus.JSONFormatter{})
logrus.SetOutput(os.Stdout)
logrus.SetLevel(logrus.WarnLevel)
}
func TestLog(t *testing.T) {
//time="2023-04-17T11:06:36+08:00" level=info msg="hello,world" 用户= "创建时的日志"
// WithFields从标准记录器创建一个条目,并向其添加多个字段。这只是一个' WithField '的助手,为每个字段调用它一次。注意,它不会记录,直到你调用调试,打印,信息,警告,致命或恐慌的条目返回。
logger := logrus.WithFields(logrus.Fields{
"用户": "创建时的日志",
})
logger.Info("hello,world")
}
WithFields从标准记录器创建一个条目,并向其添加多个字段。 这只是一个' WithField '的助手,为每个字段调用它一次。注意,它不会记录,直到你调用调试,打印,信息,警告,等条目返回。 可以随意调用 。
logger := logrus.WithFields(logrus.Fields{
"用户": "创建时的日志",
})
logger.Trace("Trace 级别的信息")
logger.Info("Info 级别的信息")
logger.Debug("Debug 级别的信息")
logrus.Warn("Warn 级别的信息")
logrus.Error("Error 级别的信息")
logrus.Fatal("Fatal 级别的信息")
logrus.Panic("Panic 级别的信息") // 会报错
至于 logrus.SetReportCaller(true) 我们直接看结果 。
logrus.SetReportCaller(true)
// time="2023-04-17T11:06:52+08:00" level=info msg="hello,world" func=DoubleCarbon/test.TestLog file="E:/Golang/DoubleCarbon/test/log_test.go:16" 用 户="创建时的日志"
logrus.SetReportCaller(false)
// time="2023-04-17T11:06:36+08:00" level=info msg="hello,world" 用户= "创建时的日志"
SetFormatter设置标准记录器格式化程序。 以 JSON 格式而不是默认的 ASCII 格式化程序记录.
输出到标准输出而不是默认标准输出 可以是任何io编写器 这里我写的输出到 终端中 也可以输出到文件中 。
仅记录警告严重性或更高级别。 可以任意定义。一般都是定义debug 以上级别的 不然日志太多就没有意义了.
gopkg.in/gemnasium/logrus-airbrake-hook.v2 使用上面这个库 可以根据异常日志把日志发送到多个位置。 也可以根据hooks连接到本地的log目录。 官网: https://github.com/gemnasium/logrus-airbrake-hook/tree/v5.0.0 但是感觉讲的有点不清楚 。
go get -u gopkg.in/gemnasium/logrus-airbrake-hook.v4 。
package test
import (
"github.com/sirupsen/logrus"
airbrake "gopkg.in/gemnasium/logrus-airbrake-hook.v4"
"testing"
)
func TestLog(t *testing.T) {
log := logrus.New()
log.AddHook(airbrake.NewHook(123, "xyz", "production"))
log.Warn("some logging message")
}
第一个传参和第二个传参 查遍了资料 也没发现有啥用 第三个传参 我猜是可以和全局变量环境接壤 例如,如果您的应用程序具有全局 变量 ,它是环境的字符串表示形式 可以做 但是感觉意义也不是太大.
if Environment == "production" {
log.SetFormatter(&log.JSONFormatter{})
} else {
// The TextFormatter is default, you don't actually have to do this.
log.SetFormatter(&log.TextFormatter{})
}
在这一块我认为没有lumberjack 好用.
直接看官方文档把 。
// a gin with logrus demo
var log = logrus.New()
func init() {
// Log as JSON instead of the default ASCII formatter.
log.Formatter = &logrus.JSONFormatter{}
// Output to stdout instead of the default stderr
// Can be any io.Writer, see below for File example
f, _ := os.Create("./gin.log")
log.Out = f
gin.SetMode(gin.ReleaseMode)
gin.DefaultWriter = log.Out
// Only log the warning severity or above.
log.Level = logrus.InfoLevel
}
func main() {
// 创建一个默认的路由引擎
r := gin.Default()
// GET:请求方式;/hello:请求的路径
// 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数
r.GET("/hello", func(c *gin.Context) {
log.WithFields(logrus.Fields{
"animal": "walrus",
"size": 10,
}).Warn("A group of walrus emerges from the ocean")
// c.JSON:返回JSON格式的数据
c.JSON(200, gin.H{
"message": "Hello world!",
})
})
// 启动HTTP服务,默认在0.0.0.0:8080启动服务
r.Run()
}
最后此篇关于Golang一日一库之logrus的文章就讲到这里了,如果你想了解更多关于Golang一日一库之logrus的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在尝试转换 https://github.com/appscode/voyager从 glide 到 go mod。 我收到如下错误: go: github.com/Sirupsen/logrus
我正在使用 ory-am/hydra,它让我在 Golang 库 gopkg.in/gorethink/gorethink.v3 中出错,错误如下: ../../../gopkg.in/gorethi
logrus是go的一个日志框架,它最让人激动的应该是hook机制,可以在初始化时为logrus添加hook,logrus可以实现各种扩展功能,可以将日志输出到elasticsearch和activ
我正在使用 Logrus,我遇到了在其日志中显示 & 字符的问题: logger.WithFields(logrus.Fields{ "value": "value&value", }
我在我所有的 go 应用程序中都使用 logrus,最近我开始使用上下文记录器。现在我想在我的应用程序的执行路径中“建立”一个上下文。请参见下面的示例,它说明了我想要什么。 package main
我正在尝试从 Golang 日志包转换到 Logrus .我的问题是关于如何自定义记录消息的时间戳格式。默认值是自启动以来的秒数,但我想要“2016-03-24 17:10:15”格式。我的简单测试代
我在 Go 应用程序中使用 logrus。我相信这个问题也适用于任何其他日志记录包(不提供基于外部文件的配置)。 logrus 提供设置各种配置的功能,例如SetOutput、SetLevel 等。
本文主要介绍 Golang 中最佳日志解决方案,包括常用日志包logrus 的基本使用,如何结合file-rotatelogs 包实现日志文件的轮转切割两大话题。 Golang 关于日志处理有很多
免责声明:我已经和 go 一起工作了……大约一天。我在这里是一个真正的n00b... 我想要一个 logrus 记录器,它在 main() 中配置了默认字段,所以我不必指望其他开发人员每次都记录所需的
我正在使用 logrus我的 Go 项目中用于结构化日志记录的库。 我的 logrus 配置如下: // Global variable for logging var gLog = &Logger{
所以我开始使用“logrus”。我将它设置在我自己的记录器包中,如下所示: package logger import( log "github.com/Sirupsen/logru
我在 golang 中使用 logrus 来记录到文件。现在,logrus 正在使用字段名称记录到文件。 即 time="26-03-2017 03:37:58"level=error msg="不是
我使用 Go logrus,我需要更改输出消息的格式。我尝试了几件事都没有成功。 我需要的是使用 logrus 格式化程序这样的格式 [错误]:日期时间 - 消息 我试过没有成功的是这个 l
我正在使用 golang logrus用于记录,我有一个包含所有常规功能的包装器,如 Info(..) , Infof(..) e.t.c 我想实现一个包装函数 Audit(..)用于记录到 sysl
使用包装的 logrus 函数/记录器时,记录器将使用记录器函数调用的文件名和行号作为所有日志行的前缀,例如: INFO[0000]logging.go:39 myfolder/logging.Inf
我有一个 golang 项目,我正在尝试使用 loggly 日志记录,正如他们在 https://www.loggly.com/blog/logging-to-loggly-from-go-with-
我将 Go 与 logrus 一起使用,但我发现时间字段的格式始终为本地时间。如何将 logrus 的时间更改为 UTC 时间? 谢谢 最佳答案 不直接支持时区设置,但您可以使用自定义 log.For
我正在使用 Logrus用于登录我的项目的包。 一切正常,但出于测试目的,我不需要显示 logrus 输出。 我正在查看 logrus.SetOuput 寻找答案。 所以基本上我希望将日志写入/dev
我想要一种方法,我们可以通过这种方法来计算否。 logrus 日志中发生的错误和警告的数量。 我想使用一个结构来记录错误和警告, type ErrorsAndWarnings struct{
这里发生了一些奇怪的事情,我无法弄清楚。 我正在为我的依赖项使用 glide,但有一个包让我很伤心。我添加了用于日志记录的 github.com/sirupsen/logrus 包,然后运行 gl
我是一名优秀的程序员,十分优秀!