[golang]使用logrus自定义日志模块
简介
logrus是一个第三方日志库,性能虽不如zap和zerolog,但方便易用灵活。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自定义日志模块的更多相关文章
- perl的Sys::Syslog模块(openlog,syslog,closelog函数,setlogsock)-自定义日志
perl的Sys::Syslog模块(openlog,syslog,closelog函数,setlogsock)-自定义日志 http://blog.chinaunix.net/xmlrpc.php? ...
- golang常用库:日志记录库-logrus使用
介绍 logrus 它是一个结构化.插件化的日志记录库.完全兼容 golang 标准库中的日志模块.它还内置了 2 种日志输出格式 JSONFormatter 和 TextFormatter,来定义输 ...
- 设计自用的golang日志模块
设计自用的golang日志模块 golang的原生日志模块不能满足需求,而开源的第三方包,也不完全够用.用户较多的logrus,却没有rotate功能,这已经是众所周知的.对于运维来说,当然是希望日志 ...
- golang 日志模块(log)
log 日志 log 模块可以自定义log 对象, 也可以使用log默认对象的日志方法 func New 创建log对象 func New(out io.Writer, prefix string, ...
- (16)-Python3之--自定义logging日志模块
1.自定义的日志模块如下: import logging from logging.handlers import TimedRotatingFileHandler import datetime f ...
- 【Gin-API系列】Gin中间件之日志模块(四)
日志是程序开发中必不可少的模块,同时也是日常运维定位故障的最重要环节之一.一般日志类的操作包括日志采集,日志查询,日志监控.日志统计等等.本文,我们将介绍日志模块在Gin中的使用. Golang如何打 ...
- 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581c2c46bef1702a2db3ae53 Dev Club 是一个交流移动 ...
- Python 日志模块 logging通过配置文件方式使用
vim logger_config.ini[loggers]keys=root,infoLogger,errorlogger [logger_root]level=DEBUGhandlers=info ...
- 搭建一套自己实用的.net架构(2)【日志模块-log4net】
先谈谈简单的模块,日志.在系统中日志模块是必须的,什么系统日志,操作日志,调试日志.这里用的是log4net. 对log4net还不熟悉的小伙伴们赶快去搜索基础教程哦, 我这里就不温故了. 那么有人要 ...
- 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ff5932cde42f1f03de29b1 本文来源: 微信客户端开发团队 ...
随机推荐
- 2023-03-25:若两个正整数的和为素数,则这两个正整数称之为“素数伴侣“。 给定N(偶数)个正整数中挑选出若干对,组成“素数伴侣“, 例如有4个正整数:2,5,6,13, 如果将5和6分为一组的
2023-03-25:若两个正整数的和为素数,则这两个正整数称之为"素数伴侣". 给定N(偶数)个正整数中挑选出若干对,组成"素数伴侣", 例如有4个正整数:2 ...
- 2022-11-23: 分数排名。输出结果和表的sql如下。请写出输出结果的sql语句? +-------+------+ | score | rank | +-------+------+ | 4.
2022-11-23: 分数排名.输出结果和表的sql如下.请写出输出结果的sql语句? ±------±-----+ | score | rank | ±------±-----+ | 4.00 | ...
- 2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。 你要用 所有的火柴棍 拼成一个正方形。 你 不能折断 任何一根火柴
2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度. 你要用 所有的火柴棍 拼成一个正方形. 你 不能折断 任何一根火柴 ...
- 2021-09-06:给表达式添加运算符。给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回所有
2021-09-06:给表达式添加运算符.给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+.- 或 * ,返回所有 ...
- 【深入浅出 Yarn 架构与实现】6-4 Container 生命周期源码分析
本文将深入探讨 AM 向 RM 申请并获得 Container 资源后,在 NM 节点上如何启动和清理 Container.将详细分析整个过程的源码实现. 一.Container 生命周期介绍 Con ...
- vue全家桶进阶之路12:监听器 watch
在Vue2中,监听器(watch)用于监测数据的变化,并在数据变化时执行一些操作.监听器可以用来响应用户输入.观察数据变化.执行异步操作等. 监听器的使用方法如下: 在组件的watch选项中定义一个或 ...
- Jan 2023-Prioritizing Samples in Reinforcement Learning with Reducible Loss
1 Introduction 本文建议根据样本的可学习性进行抽样,而不是从经验回放中随机抽样.如果有可能减少代理对该样本的损失,则认为该样本是可学习的.我们将可以减少样本损失的数量称为其可减少损失(R ...
- 【Linux】(小白向)详解VirtualBox网络配置-配置Linux网络
本文时间 2023-05-18 作者:sugerqube漆瓷 本文面向新手,重在理解会舍弃不少精密的理论,还请大佬们见谅. 本文目标:成功使用ssh工具登录linux,同时linux能连接外网. 网络 ...
- SpringMVC请求转发和重定向测试
保存视图解析器的请求转发和重定向测试 1.web.xml模板文件(略) 2.springmvc配置文件 <?xml version="1.0" encoding=" ...
- 详解RocketMQ 顺序消费机制
摘要:顺序消息是指对于一个指定的 Topic ,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费. 本文分享自华为云社区<RocketMQ 顺序 ...