[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 本文来源: 微信客户端开发团队 ...
随机推荐
- 【Visual C#】基于《斗鱼弹幕服务器第三方接入协议v1.6.2》实现斗鱼弹幕服务器接入
最近在给某个主播开发斗鱼直播间辅助工具,为了程序的高效稳定,也搜索了大量的资料,经过大量什么百度,谷歌搜索... 虽然有很多Python的脚本及JS脚本实现了拉取斗鱼弹幕信息,但是这些年来的开发职业病 ...
- SQL语句获取数据表结构定义,适合导出EXCEL为文档
SELECT 表名 = Case When A.colorder=1 Then D.name Else '' End, 表说明 = Case When A.colorder=1 Then isnull ...
- stl------stack与queue
stack与queue 一.stack 二.queue 例题:详见我的另一篇博文: 栈------表达式求值 http://www.cnblogs.com/Cloud-king/p/8453703.h ...
- sh: vue-cli-service: command not found
mac环境下运行vue项目报错sh: vue-cli-service: command not found 解决方法:cd到项目目录下,执行命令sudo rm -rf node_modules pac ...
- 2022-10-25:在一个 2 * 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示。一次 移动 定义为选择 0 与一个相邻的数字(上下左右)进行交换.
2022-10-25:在一个 2 * 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示.一次 移动 定义为选择 0 与一个相邻的数字(上下左右)进行交换. ...
- 2022-07-04:以下go语言代码输出什么?A:true;B:false;C:编译错误。 package main import “fmt“ func main() { fmt.Pri
2022-07-04:以下go语言代码输出什么?A:true:B:false:C:编译错误. package main import "fmt" func main() { fmt ...
- 2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range。x有序,x[i]表示i号怪兽在x轴上的位置;hp[i]表示i号怪兽的血量 。range表示法师如果站在x位置,用A
2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range.x有序,x[i]表示i号怪兽在x轴上的位置:hp[i]表示i号怪兽的血量 .range表示法师如果站在x位置,用A ...
- How to boot the Raspberry Pi system from a USB Mass Storage Device All In One
How to boot the Raspberry Pi system from a USB Mass Storage Device All In One 如何从 USB 启动树莓派引导系统 / 如何 ...
- 有管django使用orm 字段报错问题
直接删除表,重新生成,首先删除:migrations 中,上传记录,然后django_migrations,
- Gitlab Registries
在项目开发和部署过程中,我们常常需要一套私有仓库,比如 Code Repository.Package Repository,Docker Registry 等. Code Repository:在 ...