網(wǎng)站首頁 編程語言 正文
一、安裝
go get github.com/sirupsen/logrus
二、使用
1、當做標準庫使用
logrus實現(xiàn)了標準庫log的方法,可以用標準庫的方法用于logrus,例如
import ( log "github.com/sirupsen/logrus" ) log.Println("標準log")
2、使用帶級別日志
import ( log "github.com/sirupsen/logrus" ) func main() { log.Info("info") }
具體有七個類別Trace、Debug、Info、Warning、Error、Fatal和Panic。這里需要注意Fatal和Panic類型的日志會中斷程序的運行。
3、輸出日志時可以附帶參數(shù)
log.WithFields(log.Fields{ "flag": true, "name": "zhangsan", }).Fatal("fatal")
在運行中出現(xiàn)錯誤時,把當時的參數(shù)記錄下來更容易分析,而不是把各個參數(shù)組織成句子拼接起來。
4、日志輸出的格式
log.SetFormatter(&log.JSONFormatter{}) log.SetFormatter(&log.TextFormatter{ ForceColors: true, FullTimestamp: true, }) log.SetOutput(os.Stdout) log.SetLevel(log.WarnLevel)
可以輸出JSON,文本格式,對具體的格式還可以設(shè)置顏色、時間串等信息,可以設(shè)置輸出位置,輸出日志的級別。
5、輸出到多個位置
如果同一份日志內(nèi)容想存儲到不同位置,可以創(chuàng)建不同的log實例,對每個實例進行不同設(shè)置
var log = logrus.New()
6、輸出日志到文件
file, err := os.OpenFile("logs/cus.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err == nil { log.Out = file } else { log.Info("Failed to log to file, using default stderr") }
7、分割日志文件
如果每天的日志都放到一個文件中,會越來越大,按照時間進行分割會比較好。下面的內(nèi)容放到初始化的時候執(zhí)行。
這里面需要引入第三方庫
"github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
writer, err := rotatelogs.New( "文件名"+".%Y%m%d%H%M", // 分割后的文件名稱 rotatelogs.WithLinkName("文件名"), // 生成軟鏈,指向最新日志文件 rotatelogs.WithMaxAge(time.Hour*24*365), // 設(shè)置最大保存時間 rotatelogs.WithRotationTime(time.Hour*24), // 設(shè)置日志切割時間間隔 ) if err != nil { log.Errorf("config local file system logger error", err) } lfHook := lfshook.NewHook(lfshook.WriterMap{ logrus.DebugLevel: writer, // 為不同級別設(shè)置不同的輸出目的 logrus.InfoLevel: writer, logrus.WarnLevel: writer, logrus.ErrorLevel: writer, logrus.FatalLevel: writer, logrus.PanicLevel: writer, }, &logrus.TextFormatter{DisableColors: true}) //最后加入hook log.AddHook(lfHook)
原文鏈接:https://blog.51cto.com/u_3764469/5604385
相關(guān)推薦
- 2023-01-08 Android的VSYNC機制和UI刷新流程示例詳解_Android
- 2022-09-08 Python中ImportError錯誤的詳細解決方法_python
- 2022-10-17 Python實現(xiàn)在一行中交換兩個變量_python
- 2023-02-14 C++深入分析數(shù)據(jù)在內(nèi)存中的存儲形態(tài)_C 語言
- 2022-07-15 關(guān)于在Redis中使用Pipelining加速查詢的問題_Redis
- 2022-06-12 C語言函數(shù)指針數(shù)組實現(xiàn)計算器功能_C 語言
- 2022-09-03 Python流程控制if條件選擇與for循環(huán)_python
- 2022-12-06 python中isdigit()?isalpha()用于判斷字符串的類型問題_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支