Logrus入门

Logrus入门

1. 下载

go get github.com/sirupsen/logrus

2. logrus常用方法

logrus.Debugln("Debugln")
logrus.Infoln("Infoln")
logrus.Warnln("Warnln")
logrus.Errorln("Errorln")
logrus.Println("Println")

// 输出如下
time="2022-12-17T14:02:01+08:00" level=info msg=Infoln   
time="2022-12-17T14:02:01+08:00" level=warning msg=Warnln
time="2022-12-17T14:02:01+08:00" level=error msg=Errorln 
time="2022-12-17T14:02:01+08:00" level=info msg=Println

debug的没有输出,是因为logrus默认的日志输出等级是 info

fmt.Println(logrus.GetLevel())  // info

日志等级

PanicLevel  // 会抛一个异常
FatalLevel  // 打印日志之后就会退出
ErrorLevel
WarnLevel
InfoLevel
DebugLevel
TraceLevel  // 低级别

3. 更改日志级别

如果你想显示Debug的日志,那么你可以更改日志显示等级

logrus.SetLevel(logrus.DebugLevel)

日志级别一般是和系统环境挂钩,例如开发环境,肯定就要显示debug信息,测试环境也是需要的

线上环境就不需要这些日志,可能只显示warnning的日志

4. 设置特定字段

log1 := logrus.WithField("project", "study")
log1.Errorln("hello")
// time="2022-12-17T15:02:28+08:00" level=error msg=hello project=study
log2 := logrus.WithFields(logrus.Fields{
  "func": "main",
})
log2.Warningf("你好")
// time="2022-12-17T15:02:28+08:00" level=warning msg="你好" func=main
log3 := log2.WithFields(logrus.Fields{
  "auth": "枫枫",
})
// time="2022-12-17T15:02:28+08:00" level=warning msg="你好" auth="枫枫" func=main
log3.Warnln("你好")

通常,在一个应用中、或者应用的一部分中,都有一些固定的Field。

比如在处理用户http请求时,上下文中,所有的日志都会有request_id和user_ip

为了避免每次记录日志都要使用log.WithFields(log.Fields{“request_id”: request_id, “user_ip”: user_ip}),我们可以创建一个logrus.Entry实例,为这个实例设置默认Fields,在上下文中使用这个logrus.Entry实例记录日志即可。

5. 显示样式 Text和Json

默认的是以text的形式展示,也可以设置为json

logrus.SetFormatter(&logrus.JSONFormatter{})
log1 := logrus.WithField("project", "study")
log1.Errorln("hello")
// {"level":"error","msg":"hello","project":"study","time":"2022-12-17T15:08:24+08:00"}

6. 自定义颜色

如果我们想要在控制中显示颜色,一般的做法都是使用

ANSI 控制码,用于设置文本颜色。\033 是控制码的开始,是八进制数字,[31m 表示将文本设置为红色。

ANSI 控制码是用于在终端和控制台中控制文本格式和颜色的一种标准。它们通常用于在命令行界面 (CLI) 程序中输出彩色文本或者在文本模式下的图形界面 (GUI) 中输出文本。

func main() {
  // 前景色
  fmt.Println("\033[30m 黑色 \033[0m")
  fmt.Println("\033[31m 红色 \033[0m")
  fmt.Println("\033[32m 绿色 \033[0m")
  fmt.Println("\033[33m 黄色 \033[0m")
  fmt.Println("\033[34m 蓝色 \033[0m")
  fmt.Println("\033[35m 紫色 \033[0m")
  fmt.Println("\033[36m 青色 \033[0m")
  fmt.Println("\033[37m 灰色 \033[0m")
  // 背景色
  fmt.Println("\033[40m 黑色 \033[0m")
  fmt.Println("\033[41m 红色 \033[0m")
  fmt.Println("\033[42m 绿色 \033[0m")
  fmt.Println("\033[43m 黄色 \033[0m")
  fmt.Println("\033[44m 蓝色 \033[0m")
  fmt.Println("\033[45m 紫色 \033[0m")
  fmt.Println("\033[46m 青色 \033[0m")
  fmt.Println("\033[47m 灰色 \033[0m")
}

也可以这样写

fmt.Printf("\x1b[0;%dm%s\x1b[0m", 31, "你好")

logrus也是支持颜色输出的

我们需要在配置中去进行开启

logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true})

不过,只开启这个的话,输出会怪怪的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还有其他的一些配置

ForceColors:是否强制使用颜色输出。
DisableColors:是否禁用颜色输出。
ForceQuote:是否强制引用所有值。
DisableQuote:是否禁用引用所有值。
DisableTimestamp:是否禁用时间戳记录。
FullTimestamp:是否在连接到 TTY 时输出完整的时间戳。
TimestampFormat:用于输出完整时间戳的时间戳格式。
logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true, TimestampFormat: "2006-01-02 15:04:05", FullTimestamp: true})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/913400.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

告别重启大法,CPU飙高问题如何排查详细教程以及解决方案

文章目录 0 前言1.确定问题进程2.获取线程信息3.转换线程ID为十六进制4.获取线程堆栈5.分析代码6.性能分析工具7. 查看GC日志8.检查系统资源总结 0 前言 本篇是本人认为最实用的一篇,在日常开发运维工作中,经常遇到CPU较高的情况,一开始时还不…

在 Jupyter Notebook 中使用 Matplotlib 进行交互式可视化的教程

在 Jupyter Notebook 中使用 Matplotlib 进行交互式可视化的教程 引言 数据可视化是数据分析的重要组成部分,能够帮助我们更直观地理解数据。Matplotlib 是 Python 中最流行的绘图库之一,而 Jupyter Notebook 则是进行数据分析和可视化的理想环境。本文…

数据库SQL——什么是实体-联系模型(E-R模型)?

目录 什么是实体-联系模型? 1.实体集 2.联系集 3.映射基数 一对一(1:1) 一对多(1:n) 多对一(n:1) 多对多(m:n) 全部参与: 4.主码 弱实体集&#xf…

机器学习4_支持向量机_核函数——MOOC

目录 核函数的定义 核函数以及低维到高维的映射 的相互关系 例1:已知 求 K 例2:已知核函数 K 求 映射 的例子 核函数 K 求 映射 是一一对应的关系 支持向量机优化问题 K 满足交换性和半正定性 内积的形式 例如:可以证明 核函数…

LRU-LFU缓存算法

文章目录 缓存算法LRU缓存算法LFU缓存算法定义实现方法一:哈希表平衡二叉树方法二:双哈希表哈希链表方法三:双哈希表 缓存算法 LRU缓存算法 https://labuladong.online/algo/data-structure/lru-cache/ LRU(Least Recently Use…

斯坦福泡茶机器人DexCap源码解析:涵盖收集数据、处理数据、模型训练三大阶段

前言 因为我司「七月在线」关于dexcap的复现/优化接近尾声了,故准备把dexcap的源码也分析下。​下周则分析下iDP3的源码——为队伍「iDP3人形的复现/优化」助力 最开始,dexcap的源码分析属于此文《DexCap——斯坦福李飞飞团队泡茶机器人:带…

DICOM标准:DICOM医学影像中的覆盖层(Overlay)概念详解

引言 DICOM(数字成像和通信医学)标准在医学影像的存储、传输和交换中起着关键作用。覆盖层(Overlay)作为DICOM标准中的一个重要组成部分,用于在医学影像上叠加图形信息,如注释、标记、测量结果等。本文将深…

Windows搭建流媒体服务并使用ffmpeg推流播放rtsp和rtmp流

文章目录 搭建流媒体服务方式一安装mediamtx启动meidamtx关闭meidamtx 方式二安装ZLMediaKit启动ZLMediaKit关闭ZLMediaKit 安装FFmpeg进行推流使用FFmpeg进行rtmp推流使用VLC播放rtmp流停止FFmpeg的rtmp推流使用FFmpeg进行rtsp推流使用VLC播放rtmp流停止FFmpeg的rtsp推流 本文…

[ Linux 命令基础 5 ] Linux 命令详解-网络管理命令

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

深入浅出WebSocket(实践聊天室demo)

文章目录 什么是WebSocket?WebSocket连接过程WebSocket与Http的区别重连机制完整代码使用方法心跳机制实现聊天室demo(基于Socket.io)参考文章、视频小广告~什么是WebSocket? WebSocket 是一种在单个TCP连接上进行全双工通信的协议(计算机网络应用层的协议) 在 WebSocket A…

时序预测 | 改进图卷积+informer时间序列预测,pytorch架构

时序预测 | 改进图卷积informer时间序列预测,pytorch架构 目录 时序预测 | 改进图卷积informer时间序列预测,pytorch架构预测效果基本介绍参考资料 预测效果 基本介绍 改进图卷积informer时间序列预测代码 CTR-GC卷积,informer,CTR-GC 图卷积…

vue+Leaflet.PM插件实现创建和编辑几何图形(点、线、面、圆等)

场景 VueLeaflet实现加载OSM显示地图:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122317394在上面加载显示OSM的基础上,使用Leaflet.pm插件实现在页面上绘制、编辑、剪切、移动几何元素。Leaflet.pm插件 用于创建和编辑几何图层的插件可…

网站架构知识之Ansible进阶2(day023)

1.include文件 应用场景: 1个ansible剧本内容过多,涉及到多个play(- host:web),可读性变弱,不方便调试。 于是人们想出把单个大的剧本拆分为多个小的剧本, 多个小的剧本可以通过include功能合并使用。 使用方法,书写好对应的剧本文件&#…

订单日记助力“实峰科技”提升业务效率

感谢北京实峰科技有限公司选择使用订单日记! 北京实峰科技有限公司,成立于2022年,位于北京市石景区,是一家以从事生产、销售微特电机、输配电及控制设备等业务为主的企业。 在业务不断壮大的过程中,想使用一种既能提…

论文阅读:DualDn Dual-domain Denoising via Differentiable ISP

这篇文章是 2024 ECCV 的一篇文章,介绍的是降噪相关的工作。 Abstract 图像去噪是相机图像信号处理 (ISP) 流程中的一个关键组成部分。将去噪器融入 ISP 流程有两种典型方式:直接对拍摄的原始帧(RAW域)应用去噪器,或…

详解MySQL安装

目录 Ubantu 1. 使⽤apt安装MySQL 2.查看MySQL状态 3. MySQL 安装安全设置 4.设置密码 卸载MySQL Centos 1. 确认当前的系统版本 2.下载MySQL源 3.安装MySQL 4.启动mysqld 5.查看MySQL状态 6.设置开机自启动 7.查看MySQL密码,并登录 8.修改密码 Ubant…

AndroidStudio-视图基础

一、设置视图的宽高 1.在XML文件中设置视图宽高 视图宽度通过属性android:layout_width表达,视图高度通过属性android:layout_height表达,宽高的取值主要有下列三种: (1)wrap_content:表示与内容自适应。对于文本视图来说&…

【LQ_tips】在DEVc++中的带空格的输入格式

目标输入: 3 4 5 6 关于cin.ignore();的解释: 在 DEV C 或任何其他 C 环境中,如果你的代码没有输出,这可能是由于输入缓冲区的问题。当你使用 cin 读取输入时,如果输入中包含空格,cin 会停止读取。因此&a…

dolphin 配置data 从文件导入hive 实践(一)

datax 支持多种数据源的相互读写,作为开源软件,提供了离线采集功能,方便系统开发,过程中遇到诸多配置,需要开发者自己探索,免费同样有成本 配置模板 {"setting": {},"job": {"s…

计算机网络综合题

IP数据报的划分 CRC差错检测 冗余码的计算 因此,余数是1110,传输的数为11010110111110。在传输过程中最后两位变成o,接收端能够发现,因为11010110111110除以10011余数不为0。 子网划分 暴力求解法 (定长子网划分大量…