From 4fe88021e4b54265cef8800c342f0bd03bc9a9c9 Mon Sep 17 00:00:00 2001 From: asahi Date: Tue, 14 Jan 2025 13:03:09 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=85=E8=AF=BBlogrus=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Golang/Golang Document.md | 125 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/Golang/Golang Document.md b/Golang/Golang Document.md index ffda9d7..118d560 100644 --- a/Golang/Golang Document.md +++ b/Golang/Golang Document.md @@ -43,6 +43,14 @@ - [常用方法](#常用方法) - [NumField](#numfield) - [Field](#field) + - [logrus](#logrus) + - [import](#import) + - [Log Level](#log-level) + - [Redirect Output](#redirect-output) + - [log on console](#log-on-console) + - [log messages in log file](#log-messages-in-log-file) + - [将日志同时输出到log file和console](#将日志同时输出到log-file和console) + - [展示日志输出行数](#展示日志输出行数) - [syntax](#syntax) - [iota](#iota) @@ -869,6 +877,123 @@ var v interface{} = Addr{FrmIp: "1.2.3.4", DstIp: "7.8.9.10"} } ``` +## logrus +### import +logrus可以通过如下方式被引入: +```go +import ( + "github.com/sirupsen/logrus" +) +``` +### Log Level +logrus提供了不同的日志级别,从低到高依次为: +- Trace +- Debug +- Info +- Warn +- Error +- Fatal +- Panic + +可以通过`logrus.SetLevel`来设置日志的输出级别 +```go +logrus.SetLevel(logrus.TraceLevel) +logrus.SetLevel(logrus.DebugLevel) +logrus.SetLevel(logrus.InfoLevel) +logrus.SetLevel(logrus.WarnLevel) +logrus.SetLevel(logrus.ErrorLevel) +logrus.SetLevel(logrus.FatalLevel) +``` +> 当SetLevel将日志输出级别设置为指定级别时,日志只会输出该级别和该级别之上的内容。 +> +> 例如,当通过SetLevel将日志级别设置为Debug时,Trace级别的日志不会被输出 + +### Redirect Output +logrus支持三种方式来打印日志信息: +- 将日志信息输出到console +- 将日志信息输出到log file +- 将日志信息输出到console和log file + +#### log on console +如果想要将日志输出到`os.Stdout`或`os.Stderr`,可以按如下方式进行配置 +```go +package main + +import ( + "os" + + log "github.com/sirupsen/logrus" +) + +func main() { + // Output to stdout instead of the default stderr + log.SetOutput(os.Stdout) + + // Only log the debug severity or above + log.SetLevel(log.DebugLevel) + + log.Info("Info message") + log.Warn("Warn message") + log.Error("Error message") + log.Fatal("Fatal message") +} +``` + +#### log messages in log file +可以通过`logrus.SetOutput`配置将日志输出到文件中,示例如下: +```go +package main + +import ( + "github.com/sirupsen/logrus" + "os" + "path/filepath" +) + +func GetLogger(dir string, filename string) (logger *logrus.Logger, file *os.File, err error) { + if err = os.MkdirAll(dir, 0750); err!=nil { + return + } + logfile := filepath.Join(dir, filename) + file, err = os.OpenFile(logfile, os.O_TRUNC|os.O_CREATE, 0640) + if err != nil { + return + } + logger = logrus.New() + logger.SetLevel(logrus.InfoLevel) + logger.SetOutput(file) + logger.SetFormatter(&logrus.JSONFormatter{}) + logger.SetReportCaller(true) + return +} + +func main() { + logger, file, err := GetLogger("./log/", "app.log") + if err!=nil { + panic(any(err)) + } + defer file.Close() + logger.Info("Ciallo~") +} + +``` + +#### 将日志同时输出到log file和console +如果想要将日志同时输出到log file和console,可以通过`io.MultiWrtier`来进行实现: +```go +logger.SetOutput(io.MultiWriter(file, os.Stdout)) +``` + +### 展示日志输出行数 +如果在输出日志要,要同时输出打印日志代码的行数,可以通过如下设置 +```go +// Only log the debug severity or above +log.SetLevel(log.DebugLevel) +``` +其输出样式如下所示: +```go +{"file":"D:/Workspace/GolangWorkspace/demo/logrus/logrus.go:33","func":"main.main","level":"info","msg":"Ciallo~","time":"2025-01-14T12:59:12+08:00"} +```