简介

logrus是一个第三方日志库,性能虽不如zapzerolog,但方便易用灵活。logrus完全兼容标准的log库,还支持文本、JSON两种日志输出格式。

特点

  • 相较于标准库,logrus有更细致的日志级别,从高到低分别是:trace > debug > info > warn > error > fatal > panic
  • 支持自定义日志格式,内置支持JSON格式。
  • 支持可扩展的 Hooks 机制,可以为不同级别的日志添加 Hooks 将日志记录到不同位置。
  • 并发安全。

安装

go get github.com/sirupsen/logrus

快速入门

package main

import (
"github.com/sirupsen/logrus"
) func main() {
logrus.SetLevel(logrus.TraceLevel) // 默认为info日志级别 logrus.Trace("trace log")
logrus.Debug("debug log")
logrus.Info("Info log")
logrus.Warn("warn log")
logrus.Error("error log")
logrus.Panic("panic log") // panic会输出报错然后终止程序
logrus.Fatal("fatal log") // fatal会直接终止程序
}

自定义log模块

需求:自定义日志模块,实现日志文件自动分割,同时向控制台和文件输出日志。

示例代码:

  • tmpgo/pkg/log/log.go
package log

import (
"os"
"path/filepath" "github.com/orandin/lumberjackrus"
"github.com/sirupsen/logrus"
) var logger *logrus.Logger
var logDirPath string = "logs"
var logFilePath string func init() {
// logs目录是否存在, 不存在则创建
if _,err := os.Stat(logDirPath); os.IsNotExist(err) {
os.MkdirAll(logDirPath, os.ModePerm)
} logFilePath = filepath.Join(logDirPath, "app.log") logger = logrus.New()
logger.SetOutput(os.Stdout) // 在标准输出中显示日志内容
logger.SetLevel(logrus.InfoLevel) // 标准输出中的日志级别
logger.SetFormatter(&logrus.JSONFormatter{ // 标准输出以json形式显示日志
TimestampFormat: "2006-01-02 15:04:05.000",
}) logger.AddHook(rotateHook()) // 通过添加hook的方式实现日志输出到文件中并自动切割 } // 日志文件自动切割
func rotateHook() logrus.Hook {
hook, err := lumberjackrus.NewHook(&lumberjackrus.LogFile{
Filename: logFilePath,
MaxAge: 1,
MaxSize: 100,
MaxBackups: 30,
Compress: true,
LocalTime: false,
},
logrus.InfoLevel,
&logrus.JSONFormatter{TimestampFormat: "2006-01-02 15:04:05.000"},
&lumberjackrus.LogFileOpts{})
if err != nil {
logrus.Fatal(err)
} return hook
} func Info(v ...interface{}) {
logger.Info(v)
} func Infof(format string, v ...interface{}) {
logger.Infof(format, v...)
} func Warn(v ...interface{}) {
logger.Warn(v)
} func Warnf(format string, v ...interface{}) {
logger.Warnf(format, v...)
} func Debug(v ...interface{}) {
logger.Debug(v)
} func Debugf(format string, v ...interface{}) {
logger.Debugf(format, v...)
} func Error(v ...interface{}) {
logger.Error(v)
} func Errorf(format string, v ...interface{}) {
logger.Errorf(format, v...)
} func Panic(v ...interface{}) {
logger.Panic(v)
} func Panicf(format string, v ...interface{}) {
logger.Panicf(format, v...)
} func Fatal(v ...interface{}) {
logger.Fatal(v)
} func Fatalf(format string, v ...interface{}) {
logger.Fatalf(format, v...)
}
  • main.go中使用
package main

import (
"tmpgo/pkg/log"
) func main() {
log.Debug("debug log")
log.Info("Info log")
log.Warn("warn log")
log.Error("error log")
}

参考

[golang]使用logrus自定义日志模块的更多相关文章

  1. perl的Sys::Syslog模块(openlog,syslog,closelog函数,setlogsock)-自定义日志

    perl的Sys::Syslog模块(openlog,syslog,closelog函数,setlogsock)-自定义日志 http://blog.chinaunix.net/xmlrpc.php? ...

  2. golang常用库:日志记录库-logrus使用

    介绍 logrus 它是一个结构化.插件化的日志记录库.完全兼容 golang 标准库中的日志模块.它还内置了 2 种日志输出格式 JSONFormatter 和 TextFormatter,来定义输 ...

  3. 设计自用的golang日志模块

    设计自用的golang日志模块 golang的原生日志模块不能满足需求,而开源的第三方包,也不完全够用.用户较多的logrus,却没有rotate功能,这已经是众所周知的.对于运维来说,当然是希望日志 ...

  4. golang 日志模块(log)

    log 日志 log 模块可以自定义log 对象, 也可以使用log默认对象的日志方法 func New 创建log对象 func New(out io.Writer, prefix string, ...

  5. (16)-Python3之--自定义logging日志模块

    1.自定义的日志模块如下: import logging from logging.handlers import TimedRotatingFileHandler import datetime f ...

  6. 【Gin-API系列】Gin中间件之日志模块(四)

    日志是程序开发中必不可少的模块,同时也是日常运维定位故障的最重要环节之一.一般日志类的操作包括日志采集,日志查询,日志监控.日志统计等等.本文,我们将介绍日志模块在Gin中的使用. Golang如何打 ...

  7. 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581c2c46bef1702a2db3ae53 Dev Club 是一个交流移动 ...

  8. Python 日志模块 logging通过配置文件方式使用

    vim logger_config.ini[loggers]keys=root,infoLogger,errorlogger [logger_root]level=DEBUGhandlers=info ...

  9. 搭建一套自己实用的.net架构(2)【日志模块-log4net】

    先谈谈简单的模块,日志.在系统中日志模块是必须的,什么系统日志,操作日志,调试日志.这里用的是log4net. 对log4net还不熟悉的小伙伴们赶快去搜索基础教程哦, 我这里就不温故了. 那么有人要 ...

  10. 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ff5932cde42f1f03de29b1 本文来源: 微信客户端开发团队 ...

随机推荐

  1. 2022-11-28:给定两个数组A和B,比如 A = { 0, 1, 1 } B = { 1, 2, 3 } A[0] = 0, B[0] = 1,表示0到1有双向道路 A[1] = 1, B[1]

    2022-11-28:给定两个数组A和B,比如 A = { 0, 1, 1 } B = { 1, 2, 3 } A[0] = 0, B[0] = 1,表示0到1有双向道路 A[1] = 1, B[1] ...

  2. 2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k = 2 进行轮调后,它将变成 [1,3,0,

    2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k = 2 进行轮调后,它将变成 [1,3,0, ...

  3. ArcGIS如何自动获得随机采样点?

      本文介绍基于ArcMap软件,实现在指定区域自动生成随机点的方法.   在GIS应用中,我们时常需要在研究区域内进行地理数据的随机采样:而采样点的位置往往需要在结合实际情况的前提下,用计算机随机生 ...

  4. dotnet平台Http消息处理者工厂

    1 前言 Microsoft.Extensions.Http是一个设计非常优异的客户端工厂库,其提供了IHttpClientFactory用于创建HttpClient和IHttpMessageHand ...

  5. IntelliJ IDEA上手这一篇就够了,从入门到上瘾

    前言 每次换电脑,最最最头疼的事情莫过于安装各种软件和搭建开发环境.这算是不想换电脑的一个原因吧(最主要还是穷).除非是电脑坏了开不了机或者点一下卡一下,真不想换电脑.每次换电脑都得折腾好久. 趁着这 ...

  6. Windows 安装ActiveMq5.16.6

    Windows 安装ActiveMq5.16.6 前言 最近因为需要在项目中使用MQ,所以就想在我的老Windows机器上装个ActiveMq. 1. 下载安装 先到Activemq官网下载安装需要版 ...

  7. 一分钟学一个 Linux 命令 - pwd

    前言 大家好,我是 god23bin.欢迎大家继续围观<一分钟学一个 Linux 命令>,每天只需一分钟,记住一个 Linux 命令不成问题.本篇文章将聚焦于 pwd 命令,一个超级简单又 ...

  8. 如何在 Memcache 与 Redis 中做选择?

    memcache vs redis Memcached和Redis都是流行的内存缓存系统,用于提高应用程序的性能和响应速度.它们有一些相似之处,但也有一些区别.以下是Memcached和Redis之间 ...

  9. Gitlab恢复数据报错解决方法

    背景 在Gitlab迁移恢复数据出现must be owner of extension plpgsql解决方法:在做gitlab迁移时,按正常Gitlab备份数据gitlab-rake gitlab ...

  10. 【QCustomPlot】使用方法(源码方式)

    说明 使用 QCustomPlot 绘图库辅助开发时整理的学习笔记.同系列文章目录可见 <绘图库 QCustomPlot 学习笔记>目录.本篇介绍 QCustomPlot 的一种使用方法, ...