go日志库中的logrus
作者:zzxiaoma 发布时间:2023-07-21 13:48:02
标签:go,日志库,logrus
一、安装
go get github.com/sirupsen/logrus
二、使用
1、当做标准库使用
logrus实现了标准库log的方法,可以用标准库的方法用于logrus,例如
import (
log "github.com/sirupsen/logrus"
)
log.Println("标准log")
2、使用带级别日志
import (
log "github.com/sirupsen/logrus"
)
func main() {
log.Info("info")
}
具体有七个类别Trace、Debug、Info、Warning、Error、Fatal和Panic。这里需要注意Fatal和Panic类型的日志会中断程序的运行。
3、输出日志时可以附带参数
log.WithFields(log.Fields{
"flag": true,
"name": "zhangsan",
}).Fatal("fatal")
在运行中出现错误时,把当时的参数记录下来更容易分析,而不是把各个参数组织成句子拼接起来。
4、日志输出的格式
log.SetFormatter(&log.JSONFormatter{})
log.SetFormatter(&log.TextFormatter{
ForceColors: true,
FullTimestamp: true,
})
log.SetOutput(os.Stdout)
log.SetLevel(log.WarnLevel)
可以输出JSON,文本格式,对具体的格式还可以设置颜色、时间串等信息,可以设置输出位置,输出日志的级别。
5、输出到多个位置
如果同一份日志内容想存储到不同位置,可以创建不同的log实例,对每个实例进行不同设置
var log = logrus.New()
6、输出日志到文件
file, err := os.OpenFile("logs/cus.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err == nil {
log.Out = file
} else {
log.Info("Failed to log to file, using default stderr")
}
7、分割日志文件
如果每天的日志都放到一个文件中,会越来越大,按照时间进行分割会比较好。下面的内容放到初始化的时候执行。
这里面需要引入第三方库
"github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
writer, err := rotatelogs.New(
"文件名"+".%Y%m%d%H%M", // 分割后的文件名称
rotatelogs.WithLinkName("文件名"), // 生成软链,指向最新日志文件
rotatelogs.WithMaxAge(time.Hour*24*365), // 设置最大保存时间
rotatelogs.WithRotationTime(time.Hour*24), // 设置日志切割时间间隔
)
if err != nil {
log.Errorf("config local file system logger error", err)
}
lfHook := lfshook.NewHook(lfshook.WriterMap{
logrus.DebugLevel: writer, // 为不同级别设置不同的输出目的
logrus.InfoLevel: writer,
logrus.WarnLevel: writer,
logrus.ErrorLevel: writer,
logrus.FatalLevel: writer,
logrus.PanicLevel: writer,
}, &logrus.TextFormatter{DisableColors: true})
//最后加入hook
log.AddHook(lfHook)
来源:https://blog.51cto.com/u_3764469/5604385
0
投稿
猜你喜欢
- monfs :我想知道javascript是否可以实现这样的功能来改变本地的IP地址,例如我本地设置的IP地址是192.168.0.1,我想
- 这是fenye.asp具体代码:以下是引用片段:<%Const maxPagesize=1000 '设置分
- dim dr dr="2123123" dr1=Cint(dr) dr2=Clng(dr) 可参考如下函数说明: CIn
- 今天运行程序时,在Oracle中输入SQL语句:select * from USERS as u ,程序报错输入select * from
- 概述基于Swoole的websocket服务,再之前的消息系统系列的第4篇,实现了更加复杂的业务场景,是对消息推送的完善和优化,代码本身就是
- 生活形态(Life-Style)的概念源自社会学与心理学,六十年代即有学者正式引用到市场营销领域,并运用其心理影射与多维度等特质,着力解释人
- 和网友们讨论了数组取交集的方法,下面是两个实现arr1=["1","5","6"
- XML(可扩展标记语言)已成为Web应用中数据表示和数据交换的标准,随着Internet的快速发展,尤其是电子商务,Web服务等应用的广泛使
- 只能输入中文/** * 22.验证汉字 * 表达式 ^[\u4e00-\u9fa5]{0,}$ * 描述 只能汉字 * 匹配的例子 清清月儿
- 一、为图片添加水印 代码如下:<% Dim Jpeg ””//声明变量 Set Jpeg = Server.CreateObject(
- 前几天,为了增强本站的SEO,着手把另一个域名:www.aspxhome.com下的所有页面301转向到www.cidianwang.com
- 代码如下: function astro(birth) astro="" if birth=""
- 注:IE8以前的版本均不支持该特性为了向文档中插入生成内容,可以使用:before与:after伪元素。如,我想在所有链接的后面加上&quo
- froglt 的站点:http://www.go2here.net 欢迎转载,请注明出处,未经作者允许,禁止一切商业应用。这是即
- 如何实现在下拉菜单里输入文字? 用这个代码试试看,应该可以的:<script>function pp(){se.opt
- 什么是.netMicrosoft® .NET 是 Microsoft XML Web services 平台。XML Web
- 本文主要概括安装时提示有挂起的操作、收缩数据库、压缩数据库、转移数据库给新用户以已存在用户权限、检查备份集、修复数据库等操作技巧。1.挂起操
- 一、意义:当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、网络故障、进程故障和系统故障)影响数
- “位置:首页 第一屏通栏 格式:jpg 尺寸:960*90 ……”在工作我们经常会接到这样的banner设计需求,由
- Yoho, 大家好,又是我哟~ 首先抱歉让大家等了这么多时间。最近实在比较繁忙啦。不过我还是会尽量抽空出来给大家讲点有的没的,欢迎大家继续