【Go】go的日志框架-logrus初探
summary
logrus是针对go语言开发的一款日志系统,在本片文章中,将会对上手logrus的过程中遇到的一些问题做一个记录。这个记录参考了这篇文章。下面我们开始吧!
上手
package main import (
log "github.com/sirupsen/logrus"
) func main() {
log.WithFields(log.Fields{
"animal": "walrus",
}).Info("A walrus appears")
}
这样就可以啦,可以看到输出的日志格式如下:
time="2018-08-11T15:42:22+08:00" level=info msg="A walrus appears" animal=walrus
那么接下来的问题是,以这种方式输出的日志可以看到就还是比较杂乱无章的,那么有没有方式把日志用一种比较有格式的方式输出呢?我们想到了JSON格式。那么下面我们用
log.SetFormatter(&log.JSONFormatter{})
这条语句,以JSON格式来输出我们的日志:
package main import (
"os"
log "github.com/sirupsen/logrus"
) func init() {
// 设置日志格式为json格式
log.SetFormatter(&log.JSONFormatter{}) // 设置将日志输出到标准输出(默认的输出为stderr,标准错误)
// 日志消息输出可以是任意的io.writer类型
log.SetOutput(os.Stdout) // 设置日志级别为warn以上
log.SetLevel(log.WarnLevel)
} func main() {
log.WithFields(log.Fields{
"animal": "walrus",
"size": 10,
}).Info("A group of walrus emerges from the ocean") log.WithFields(log.Fields{
"omg": true,
"number": 122,
}).Warn("The group's number increased tremendously!") log.WithFields(log.Fields{
"omg": true,
"number": 100,
}).Fatal("The ice breaks!")
}
输出对应如下:
{"level":"warning","msg":"The group's number increased tremendously!","number":122,"omg":true,"time":"2019-11-13T17:32:42+08:00"}
{"level":"fatal","msg":"The ice breaks!","number":100,"omg":true,"time":"2019-11-13T17:32:42+08:00"}
除了setFormatter用于把日志的格式设置为JSON之外,我们在这里还设置了显示日志的级别。
并可以看到,每次在withField之后加上一种输出日志的格式之后就可以输出一行日志了。
深入
有时我们也需要在程序的不同部分中,向日志中不断加入信息,并在程序的最后进行输出,下面提供一种使用logger的办法:
logger:= log.WithFields(log.Fields{
"path": r.URL.Path,
"method": r.Method,
"request_id": reqID,
"client_ip": r.RemoteAddr,
"start_time": startTime,
})
logger = logger.WithFields(log.Fields{
"error": err.Error(),
})
logger.WithFields(log.Fields{
"error_code": aErr.Code,
"error_msg": aErr.Msg,
}).Warn("FAIL")
如图,用这种办法就可以在程序的各个部分中向同一段log中加入所需要的内容了。下面所需要做的就是吧logger作为一个参数在各个需要进行输出log的函数中传播了。
【Go】go的日志框架-logrus初探的更多相关文章
- golang日志框架--logrus学习笔记
golang日志框架--logrus学习笔记 golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数,对于更精细的日志级别.日志文件分割以及日志分发等方面并没有提供 ...
- logrus日志框架
目录 logrus介绍 logrus配置 日志打印 HOOK机制 Gin日志 Fatal处理 线程安全 logrus介绍 golang标准库的日志框架非常简单,仅仅提供了print,panic和fat ...
- 初探日志框架Logback
一. 背景 最近因为学习项目时需要使用logback日志框架来打印日志, 使用过程中碰到很多的疑惑, 而且需要在控制台打印mybatis执行的sql语句, 于是决定沉下心来 研究一下logback的使 ...
- Go中的日志及第三方日志包logrus
有别的语言使用基础的同学工作中都会接触到日志的使用,Go中自然也有log相关的实现.Go log模块主要提供了3类接口,分别是 "Print .Panic .Fatal ",对每一 ...
- Go第三方日志库logrus
日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发.本文介绍了logrus这个日志库的基本使用. logrus介绍 Logru ...
- 第三方日志库logrus使用
日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发.本文介绍了logrus这个日志库的基本使用. logrus介绍 Logru ...
- Go之第三方日志库logrus使用
文章引用自 第三方日志库logrus使用 日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发.本文介绍了logrus这个日志库 ...
- 解读ASP.NET 5 & MVC6系列(9):日志框架
框架介绍 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比. ...
- Java日志框架:SLF4J,Common-Logging,Log4J,Logback说明
Log4j Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等 ...
随机推荐
- Qt 字符串截取 获取指定字符位置
获取字符在字符串中的位置 QString str = "AT+LOC+LOCATION: 115.850441,33.004833"; QString s = "LOC& ...
- Python学习日记(四十一) Mysql数据库篇 九
前言 索引的主要作用是起到约束和加速查找,ORM框架(sqlalchemy)是用类和对象对数据库进行操作 索引的种类 按种类去分 1.普通索引:能够加速查找 2.主键索引:能够加速查找.不能为空.不能 ...
- sqlldr导入数据取消回显记录条数
之前在脚本中使用sqlldr导入数据时,如果表的数据量较大的话,会使日志文件变得极大,之后在网上查找了很久,才在一个偶然的机会找到这个参数 silent=all 但是最近发现这样写有个问题,就是加了这 ...
- 【HTTP】HTTP协议的请求与响应
创建时间:6.14 http协议 的位置 1.HTTP是什么 超文本传输协议(HyperText Transfer Protocol) 2.Http协议的组成 Http协议由Http请求和Http响应 ...
- VMware Xcode真机调试
原因如下:VMware12默认使用usb3.0 ,先给苹果系统关机,然后打开虚拟机设置,更改usb控制器为USB2.0 就可以成功连接了. 问题提示:could not launch “name” p ...
- 第06节-开源蓝牙协议BTStack框架分析
本篇博客根据韦东山的视频,整理所得. 本篇博客讲解BTStack的框架,首先来看一下硬件的结构: 蓝牙模块接在电脑上,或是接在开发板上.不论接在哪,我们都需要编写程序来控制这个蓝牙模块. . 我们需要 ...
- org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next tok
org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next tokenfound character ‘@’ th ...
- jquery 统计统计子标签的个数
本文实例讲述了jQuery获得子元素个数的方法.分享给大家供大家参考.具体分析如下://获取id=div1下的子元素的个数$('#div1').children().length;//获取id=div ...
- pyinstaller安装及使用
pyinstaller使用 将.py文件转换成无需源码的.exe可执行文件 下载 1.打开cmd直接输入pip install pyinstaller即可下载 2.如第一种方法无法下载,打开pyins ...
- Jenkins集成allure测试报告
前言 Allure框架是一个功能强大的自动化测试报告工具,不仅支持多种编程语言,而且能够完美的与各种集成工具结合,包括Jenkins,TeamCity,Bamboo,Maven等等,因此受到了很多测试 ...