5.2 日志功能

5.2 日志功能

日志的话需要先了解 logrus 包

https://pkg.go.dev/github.com/sirupsen/logrus#section-readme

5.2.1 logrus 包初体验

1.编写程序

package main

import "github.com/sirupsen/logrus"

func main() {
    // 记录日志级别
    logrus.Error("error")
    logrus.Warning("warning")
    logrus.Info("info")
    logrus.Debug("debug")
}

2.执行程序

[16:41:55 root@go testlogrus]#go run main.go 
ERRO[0000] error                                        
WARN[0000] warning                                      
INFO[0000] info 

# 但是运行程序之后发现 debug 日志没出来

5.2.1.1 设置日志级别

所以我们想要设置他的日志级别,就可以通过 logrus.SetLevel()

package main

import "github.com/sirupsen/logrus"

func main() {
    // 将日志级别设置为 debug
    logrus.SetLevel(logrus.DebugLevel)
    logrus.Error("error")
    logrus.Warning("warning")
    logrus.Info("info")
    logrus.Debug("debug")
}

再次运行

[16:42:18 root@go testlogrus]#go run main.go 
ERRO[0000] error                                        
WARN[0000] warning                                      
INFO[0000] info                                         
DEBU[0000] debug  

# debug 就输出了

5.2.1.2 设置日志格式

现在输出的是文本格式,但是有的时候我们需要将他输出为 json 格式

package main

import "github.com/sirupsen/logrus"

func main() {
    logrus.SetLevel(logrus.DebugLevel)
    // 设置为 json 格式
    logrus.SetFormatter(&logrus.JSONFormatter{})
    logrus.Error("error")
    logrus.Warning("warning")
    logrus.Info("info")
    logrus.Debug("debug")
}

运行程序结果为 json

[16:44:42 root@go testlogrus]#go run main.go 
{"level":"error","msg":"error","time":"2021-09-29T16:47:41+08:00"}
{"level":"warning","msg":"warning","time":"2021-09-29T16:47:41+08:00"}
{"level":"info","msg":"info","time":"2021-09-29T16:47:41+08:00"}
{"level":"debug","msg":"debug","time":"2021-09-29T16:47:41+08:00"}

5.2.1.3 开启文件调用

如果程序报错我们想知道他的具体位置就可以通过logrus.SetReportCaller(true) true 表示开启

package main

import "github.com/sirupsen/logrus"

func main() {
    logrus.SetLevel(logrus.DebugLevel)
    // 设置为 json 格式
    logrus.SetFormatter(&logrus.JSONFormatter{})

    // 开启文件调用
    logrus.SetReportCaller(true)
    logrus.Error("error")
    logrus.Warning("warning")
    logrus.Info("info")
    logrus.Debug("debug")
}

运行

[16:47:41 root@go testlogrus]#go run main.go 
{"file":"/root/project/testlogrus/main.go:12","func":"main.main","level":"error","msg":"error","time":"2021-09-29T16:50:30+08:00"}
{"file":"/root/project/testlogrus/main.go:13","func":"main.main","level":"warning","msg":"warning","time":"2021-09-29T16:50:30+08:00"}
{"file":"/root/project/testlogrus/main.go:14","func":"main.main","level":"info","msg":"info","time":"2021-09-29T16:50:30+08:00"}
{"file":"/root/project/testlogrus/main.go:15","func":"main.main","level":"debug","msg":"debug","time":"2021-09-29T16:50:30+08:00"}

# 可以看到多了一个 "file":"/root/project/testlogrus/main.go:15" 

5.2.1.4 将日志记录到文件

package main

import (
    "os"

    "github.com/sirupsen/logrus"
)

func main() {
    // 创建追加文件
    file, err := os.OpenFile("test.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
    if err != nil {
        logrus.Fatal(err)
    }

    defer file.Close()

    // 将日志写入文件
    logrus.SetOutput(file)

    logrus.SetLevel(logrus.DebugLevel)
    // 设置为 json 格式
    logrus.SetFormatter(&logrus.JSONFormatter{})

    // 开启文件调用
    logrus.SetReportCaller(true)
    logrus.Error("error")
    logrus.Warning("warning")
    logrus.Info("info")
    logrus.Debug("debug")
}

执行程序已经记录

5.2.1.5 日志存储时间限制

但是 logrus 并没有对日志进行存储时间的记录,所以会随着时间的推移磁盘会被写满,这里我通过 lumberjack 来实现

https://pkg.go.dev/gopkg.in/natefinch/lumberjack.v2#section-readme

package main

import (
    "github.com/sirupsen/logrus"
    "gopkg.in/natefinch/lumberjack.v2"
)

func main() {

    // 定义 lumberjack.Logger{} 结构体,因为 logrus.SetOutput 是一个接口接收的时候都是接收指针
    logger := &lumberjack.Logger{
        Filename:   "test.log", // 日志文件名
        MaxSize:    1,          // 一个日志文件最大 1M,当然在工作中根据场景进行调整
        MaxBackups: 7,          // 最大保留 7 个文件
        Compress:   true,       // 开启压缩功能
    }

    defer logger.Close()

    // 将日志写入文件
    logrus.SetOutput(logger)

    logrus.SetLevel(logrus.DebugLevel)
    // 设置为 json 格式
    logrus.SetFormatter(&logrus.JSONFormatter{})

    // 开启文件调用
    logrus.SetReportCaller(true)

    // 为了凸显日志多一点,这里循环 10 万次
    for i := 0; i < 100000; i++ {
        logrus.Error("error")
        logrus.Warning("warning")
        logrus.Info("info")
        logrus.Debug("debug")
    }

}

运行我们发现已经将日志保留了 7 份

所以接下来我们就可以在程序里面使用 logrus 记录程序在运行中的日志信息

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇