GO语言实现日志切割的示例详解

 更新时间:2023年07月28日 10:19:46   作者:LeoForBest  
日志记录对程序排查问题比较关键,所以本文将选择Logrus和lumberjack两个库进行日志切割以及记录调用源,感兴趣的小伙伴可以了解一下

准备工作

日志记录对程序排查问题比较关键,记录下GO中日志选择,从以下出发点考虑:

  • 日志文件能自动切割,以免过大
  • 能记录从哪个文件哪行代码调用的,方便排查问题
  • 配置简单明了
  • 库文件使用人数较多,稳定

经过一段时间摸索,最终选择了Logrus和lumberjack两个库,使用人数都比较多。

安装两个库

go get gopkg.in/natefinch/lumberjack.v2
go get github.com/sirupsen/logrus

代码

实际中一行配置就可以完成,后续只用调用logrus.Debug、logrus.Info同标准库一样只用log改为logrus十分简单明了

    logrus.SetOutput(io.MultiWriter(os.Stdout, &lumberjack.Logger{
        Filename:   "go-log.log",
        MaxBackups: 10,
        MaxSize:    20,
    }))

整体代码如下,基本能满足实际使用需求

个别需求调整可以参考这两个文档

package main

import (
	"io"
	"os"
	"time"

	"github.com/sirupsen/logrus"
	"gopkg.in/natefinch/lumberjack.v2"
)

func main() {
	// 同时输出到终端和文件
	logrus.SetOutput(io.MultiWriter(os.Stdout, &lumberjack.Logger{
		Filename:   "go-log.log",
		MaxBackups: 10,
		MaxSize:    20,
	}))
	/*只输出到文件的话只用以下写法
	logrus.SetOutput(&lumberjack.Logger{
		Filename:   "go-log.log",
		MaxBackups: 10,
		MaxSize:    20,
	})
	*/

	// 这个在日志中记录代码位置,十分有用
	logrus.SetReportCaller(true)
	
	// 设置输出等级,按实际需求设置,可以忽略
	logrus.SetLevel(logrus.InfoLevel)
	logrus.Debug("debug message")
	logrus.Infof("info message at %s\n", time.Now().Format("2006-01-02 15:04:05"))
	logrus.Error("error message")
}

使用效果

logrus.SetReportCaller(true)可以自动在日志当中记录代码调用位置,设置为false时候不开启

到此这篇关于GO语言实现日志切割的示例详解的文章就介绍到这了,更多相关GO日志切割内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang执行命令获取执行结果状态(推荐)

    golang执行命令获取执行结果状态(推荐)

    这篇文章主要介绍了golang执行命令获取执行结果状态的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-11-11
  • Golang实现自己的Redis(有序集合跳表)实例探究

    Golang实现自己的Redis(有序集合跳表)实例探究

    这篇文章主要为大家介绍了Golang实现自己的Redis(有序集合跳表)实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • GoFrame glist 基础使用和自定义遍历

    GoFrame glist 基础使用和自定义遍历

    这篇文章主要为大家介绍了GoFrame glist的基础使用和自定义遍历示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Golang你一定要懂的连接池实现

    Golang你一定要懂的连接池实现

    这篇文章主要介绍了Golang你一定要懂的连接池实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Go语言metrics应用监控指标基本使用说明

    Go语言metrics应用监控指标基本使用说明

    这篇文章主要为大家介绍了Go语言metrics应用监控指标的基本使用说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • Golang中的http.Server源码深入分析

    Golang中的http.Server源码深入分析

    这篇文章主要介绍了Golang中的http.Server源码,实现一个http.Server非常容易,只需要短短几行代码,同时有了协程的加持,Go实现的http.Server能够取得非常优秀的性能,下面我们来分析看看http.Server的源码
    2023-05-05
  • 详解Golang中下划线的使用方法

    详解Golang中下划线的使用方法

    这篇文章主要介绍了详解Golang中下划线的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • go语言题解LeetCode1275找出井字棋的获胜者示例

    go语言题解LeetCode1275找出井字棋的获胜者示例

    这篇文章主要为大家介绍了go语言题解LeetCode1275找出井字棋的获胜者示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Golang使用Gin框架实现HTTP上传文件过程介绍

    Golang使用Gin框架实现HTTP上传文件过程介绍

    由于需求中有文件上传这一个需求,在这里我们就学习一下go语言如何上传文件。本文主要通过表单的方式进行文件上传操作,本文实例为大家分享了Go实现文件上传操作的具体代码,供大家参考,具体内容如下
    2023-04-04
  • Go条件控制语句详解(if-else、switch和select)

    Go条件控制语句详解(if-else、switch和select)

    条件语句用于检查一个条件是否为真,并根据条件的真假来决定是否执行相应的代码,下面这篇文章主要给大家介绍了关于Go条件控制语句(if-else、switch和select)的相关资料,需要的朋友可以参考下
    2024-03-03

最新评论