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初探的更多相关文章

  1. golang日志框架--logrus学习笔记

    golang日志框架--logrus学习笔记 golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数,对于更精细的日志级别.日志文件分割以及日志分发等方面并没有提供 ...

  2. logrus日志框架

    目录 logrus介绍 logrus配置 日志打印 HOOK机制 Gin日志 Fatal处理 线程安全 logrus介绍 golang标准库的日志框架非常简单,仅仅提供了print,panic和fat ...

  3. 初探日志框架Logback

    一. 背景 最近因为学习项目时需要使用logback日志框架来打印日志, 使用过程中碰到很多的疑惑, 而且需要在控制台打印mybatis执行的sql语句, 于是决定沉下心来 研究一下logback的使 ...

  4. Go中的日志及第三方日志包logrus

    有别的语言使用基础的同学工作中都会接触到日志的使用,Go中自然也有log相关的实现.Go log模块主要提供了3类接口,分别是 "Print .Panic .Fatal ",对每一 ...

  5. Go第三方日志库logrus

    日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发.本文介绍了logrus这个日志库的基本使用. logrus介绍 Logru ...

  6. 第三方日志库logrus使用

    日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发.本文介绍了logrus这个日志库的基本使用. logrus介绍 Logru ...

  7. Go之第三方日志库logrus使用

    文章引用自 第三方日志库logrus使用 日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发.本文介绍了logrus这个日志库 ...

  8. 解读ASP.NET 5 & MVC6系列(9):日志框架

    框架介绍 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比. ...

  9. Java日志框架:SLF4J,Common-Logging,Log4J,Logback说明

    Log4j  Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等 ...

随机推荐

  1. XSS相关Payload及Bypass的备忘录(上)

    翻译学习准备自用,同时分享给大家, 来自于: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20Injecti ...

  2. 英语lasurite青金石lasurite单词

    lasurite青金石的蓝色,是希望的颜色. 医药功效:青金石可入药,是世界公认的.青金即青金石,是一种不透明或半透明的蓝色.蓝紫色或蓝绿色的准宝石,主要由天蓝石和方解石组成.青金石色是藏传佛教中药师 ...

  3. ASS/SSA字幕格式

    [时间:2019-04] [状态:Open] [关键词:字幕,ASS,SSA,文件格式,v4 Styles,字幕特效] 0 引言 SubStation Alpha(Sub Station Alpha) ...

  4. matplotlib 绘制正余弦曲线图

    1.普通风格 代码 import numpy as npimport matplotlib.pyplot as plt x = np.linspace(0, 2*np.pi, 50)y1 = np.s ...

  5. ELK安装过程中一些注意的地方

    安装流程比较简单,只需要下载安装包,解压安装包,修改配置文件,然后启动组件即可,但还是遇到一些小问题,这里做一下记录. 各个组件版本号需要保持一样,例如都使用7.1.1版本 es不能以root账户启用 ...

  6. Python实现十大经典排序算法(史上最简单)。

    十大排序算法(Python实现)一. 算法介绍及相关概念解读 算法分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn), ...

  7. 前端(4)BOM与DOM

    前端(4)BOM与DOM I/O前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交 ...

  8. input 关键字提示,对于一些特定优化来说,很有用处

    只用html就可以做出提醒操作:效果如下图 这里是代码,怎么样,很简单吧 <form action="/server" method="post"> ...

  9. hdu1873-看病要排队-(结构体优先队列)

    http://acm.hdu.edu.cn/showproblem.php?pid=1873 #include<stdio.h> #include<iostream> #inc ...

  10. 历届试题 危险系数-(dfs+记录路径)

     历届试题 危险系数   问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我 ...