Golang一日一库之logrus

这篇具有很好参考价值的文章主要介绍了Golang一日一库之logrus。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

之前一篇文章介绍了 日志库zap https://www.cnblogs.com/zichliang/p/17311480.html
毋庸置疑,zap库无论是Golang在项目中 还是生产中都极其优秀的一个数据库,而且他是当今Go最快的日志库 性能最高的日志库。
但是今天缺不是来说他的,今天介绍的是另一款日志库 logrus
虽然 logrus 已经不维护 且不更新,但是个人感觉logrus比zap 要好用很多,不是说性能,是使用的简易程度而言。

logrus介绍

首先贴上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

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 级别的信息") // 会报错

SetReportCaller

至于 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

SetFormatter设置标准记录器格式化程序。
以 JSON 格式而不是默认的 ASCII 格式化程序记录。

SetOutput

输出到标准输出而不是默认标准输出
可以是任何io编写器
这里我写的输出到 终端中 也可以输出到文件中

SetLevel

仅记录警告严重性或更高级别。
可以任意定义。一般都是定义debug 以上级别的
不然日志太多就没有意义了。

Hooks

https://github.com/sirupsen/logrus/wiki/Hooks
使用上面这些库 包含了可以所有可以连接logrus的hooks

Golang一日一库之logrus

举例

因为一般来说要发送日志 肯定不可能选择 MySQL这种数据库 ,因为日志运行起来量是很大的,所以一般来说
会选择 es 或者redis 或者mongodb 这种非关系数据库。
这里就简单举个redis的例子

安装

logrus-redis-hook

go get github.com/rogierlommers/logrus-redis-hook

简易使用

package main

import (
	logredis "github.com/rogierlommers/logrus-redis-hook"
	"io/ioutil"

	"github.com/sirupsen/logrus"
)

func init() {
	hookConfig := logredis.HookConfig{
		Host:     "localhost",
		Key:      "my_redis_key",
		Format:   "v0",
		App:      "my_app_name",
		Port:     6379,
		Hostname: "my_app_hostname", // will be sent to field @source_host
		DB:       0,                 // optional
		TTL:      3600,
		Password: "*****", // 写你的密码
	}

	hook, err := logredis.NewHook(hookConfig)
	if err == nil {
		logrus.AddHook(hook)
	} else {
		logrus.Errorf("logredis error: %q", err)
	}
}

func main() {
	// when hook is injected succesfully, logs will be sent to redis server
	logrus.Info("just some info logging...")

	// we also support log.WithFields()
	logrus.WithFields(logrus.Fields{
		"animal": "walrus",
		"foo":    "bar",
		"this":   "that"}).
		Info("additional fields are being logged as well")

	// If you want to disable writing to stdout, use setOutput
	logrus.SetOutput(ioutil.Discard)
	logrus.Info("This will only be sent to Redis")
}

如图所示
Golang一日一库之logrus

直接就在redis里写入了日志信息

如果失败 如下图所示
Golang一日一库之logrus

gin框架使用logrus

直接看官方文档把文章来源地址https://www.toymoban.com/news/detail-416251.html

// 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的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • golang 日志库logrus实践

    logrus 完全兼容标准的 log 库,还支持文本、JSON 两种日志输出格式。很多知名的开源项目都使用了这个库,如大名鼎鼎的 docker。 第三方库需要先安装: 后使用: logrus 的使用非常简单,与标准库 log 类似。 logrus 支持更多的日志级别: Panic :记录日志,然后 panic 。 Fatal :致

    2024年02月17日
    浏览(44)
  • Golang标准库之bytes介绍

    本次主要介绍golang中的标准库 bytes ,基本上参考了 字节 | bytes 、Golang标准库——bytes 文章。 bytes 库主要包含 5 大部分,即: 常量 变量 函数 Buffer Reader 我们依次学习上面的 5 大部分。 bytes.MinRead 是一个常量,表示在使用 ReadFrom 方法从 io.Reader 中读取数据时,每次读取的最小

    2024年02月07日
    浏览(60)
  • golang常用库之-golang-jwt/jwt包

    github: https://github.com/golang-jwt/jwt golang-jwt/jwt 是一个在 Go 语言中使用 JSON Web Tokens(JWT)进行身份验证和授权的库。JWT 是一种用于在跨网络进行安全通信的开放标准(RFC 7519),它使用一个 JSON 对象来表示被声明的安全性信息。 golang-jwt/jwt 包提供了创建、解析和验证 JWT 的功能

    2024年01月23日
    浏览(37)
  • 7天玩转 Golang 标准库之 http/net

    在构建web应用时,我们经常需要处理HTTP请求、做网页抓取或者搭建web服务器等任务,而Go语言在这方面为我们提供了强大的内置工具:net/http标准库,它为我们操作和处理HTTP协议提供了便利。 首先,我们来看看如何使用net/http标准库发送一个HTTP请求。net/http库中的 http.Get 函数

    2024年02月04日
    浏览(50)
  • Go编程快闪之 logrus日志库

    战术卧倒 golang中常见的日志包是logrus, 根据logrus的胚子和我们的生产要求,给出一个生产可用的logrus实践姿势。 主谓宾定状补 logrus是一个结构化的、可插拔的、兼容golang标准log api的日志库。 快速过一下能力 支持对output=TTY增加颜色 内置JSONFormatter和TextFormatter(默认

    2024年02月06日
    浏览(38)
  • 2023软考-系统架构师一日游

    上周六(11月4号)参见了软考,报的系统架构师,今年下半年是第一次推行机考,简单来分享下大致流程,至于考试难度、考点什么的,这个网上有很多专门研究这些的机构,本人无权发言。考试的经过还是可以说一下的,大家可以有个大致的了解。 我是9月25最后一天报的名

    2024年02月05日
    浏览(41)
  • 一日一题:第六题---成绩统计&单词分析

    ​作者:小妮无语 专栏:一日一题 🚶‍♀️✌️道阻且长,不要放弃✌️🏃‍♀️ ​今天主要发现两个很好用的结构,想做个记录 题目描述· 小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。 如果得分至少是 60 分,则称为及格。

    2023年04月09日
    浏览(44)
  • go入门实践三-go日志库-Logrus入门教程

    日志可以用于排查bug。在C++中,我尝试过:boost log简介、spdlog日志库的封装使用。但我还是比较喜欢plog,因为它简单。 Go 标准库提供了一个日志库log。它的使用可见:Go 每日一库之 log。但是,它有个致命的缺点,没有日志等级。它可以很好的用于日常写demo,但是不适合稍微

    2024年02月13日
    浏览(50)
  • 【Go语言开发】将logrus日志送到elasticsearch构成elk体系

    这篇文章我们来讲讲怎么把logrus日志送到es。 使用的日志库是 github.com/sirupsen/logrus ,由于这个包中的日志对象是可以接入很多个hook的,所以我们可以使用hook来接入 elasticsearch 来操作 。 hook 就是钩子,当设置hook在某个点之后,hook会执行这个点之后异步进行。 比如让我们把

    2024年02月12日
    浏览(30)
  • 每日一库:gosec

    gosec 是一个用于在 Go 代码中查找安全问题的开源工具,它可以帮助发现可能的漏洞和潜在的安全风险。以下是关于 gosec 的详细介绍: gosec 是一个静态分析工具,用于扫描 Go 代码以查找潜在的安全问题。它可以识别常见的代码漏洞、敏感信息泄露和其他安全问题,帮助开发人

    2024年02月12日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包