• Logrus日志


    目录

    一、Logrus

    1、Logrus使用

    1、下载Logrus第三方库:

    2、日志配置文件

    3、加载日志配置文件

    4、初始化日志记录器

    5、在main.go中加载init函数


    一、Logrus

    日志的重要性及作用

    日志是程序的重要组成部分
    1.记录用户操作的审计日志
    2.快速定位问题的根源
    3.追踪程序执行的过程。
    4.追踪数据的变化
    5.数据统计和性能分析
    6.采集运行环境数据

    第三方日志库:
            Golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数,对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持。
    所以催生了很多第三方的日志库,但是在golang的世界里,没有一个日志库像slf4j那样在Java中具有绝对统治地位。golang中,流行的日志框架包括logrus、zap、zerolog、seelog等。

           Logrus功能强大,性能高效,而且具有高度灵活性,提供了自定义插件的功能。很多开源项目,如docker,prometheus等,都是用了logrus来记录其日志。

    1、Logrus使用

    1、下载Logrus第三方库:

    安装Logrus的命令:

    go get -u github.com/sirupsen/logrus

    2、日志配置文件

    confs/log_config.json

    1. {
    2. "log_dir": "D:/mylog.log",
    3. "log_level": "info"
    4. }

    3、加载日志配置文件

    logs_ope/log_load_config.go

    1. package logs_ope
    2. import (
    3. "encoding/json"
    4. "io/ioutil"
    5. "os"
    6. )
    7. // 对应结构体:
    8. type LogConfig struct {
    9. LogDir string `json:"log_dir"`
    10. LogLevel string `json:"log_level"`
    11. }
    12. // 读取配置文件:
    13. func LoadLogConfig() *LogConfig {
    14. log_conf := LogConfig{}
    15. //打开文件:
    16. file, err := os.Open("part07/confs/log_config.json")
    17. if err != nil { //错误处理
    18. panic(err)
    19. }
    20. //资源释放:
    21. defer file.Close()
    22. //用流读取文件中内容:
    23. data, err2 := ioutil.ReadAll(file)
    24. if err2 != nil {
    25. panic(err2)
    26. }
    27. //Unmarshal将json字符串解码到对应的数据结构中:
    28. //第一个参数:json字符串,第二个参数:接收json解析的数据结构
    29. err3 := json.Unmarshal(data, &log_conf)
    30. if err3 != nil {
    31. panic(err3)
    32. }
    33. return &log_conf
    34. }

    4、初始化日志记录器

    logs_ope/log_init.go

    1. package logs_ope
    2. import (
    3. "github.com/sirupsen/logrus"
    4. "os"
    5. )
    6. // 初始化记录器一个实例:
    7. var Logrus = logrus.New()
    8. func init() {
    9. //先读取日志的配置文件:
    10. log_conf := LoadLogConfig()
    11. //设置日志的输出文件:
    12. file, err := os.OpenFile(log_conf.LogDir, os.O_APPEND|os.O_CREATE, 0666)
    13. if err != nil {
    14. panic(err)
    15. }
    16. //将上面打开的file文件设置为 日志的输出文件:
    17. Logrus.Out = file
    18. //设置日志的级别:
    19. //定义一个map,专门存储日志级别:
    20. log_level_map := map[string]logrus.Level{
    21. "trace": logrus.TraceLevel,
    22. "panic": logrus.PanicLevel,
    23. "fatal": logrus.FatalLevel,
    24. "error": logrus.ErrorLevel,
    25. "warn": logrus.WarnLevel,
    26. "info": logrus.InfoLevel,
    27. "debug": logrus.DebugLevel,
    28. }
    29. Logrus.SetLevel(log_level_map[log_conf.LogLevel])
    30. //日志格式化:设置文本格式
    31. Logrus.SetFormatter(&logrus.TextFormatter{})
    32. }

    5、在main.go中加载init函数

    1. package main
    2. import (
    3. "github.com/gin-gonic/gin"
    4. _ "test_gin/part07/logs_ope"
    5. "test_gin/part07/myfunc"
    6. )
    7. func main() {
    8. r := gin.Default()
    9. r.LoadHTMLGlob("part07/templates/**/*")
    10. //指定文件:
    11. r.Static("/s", "part07/static")
    12. r.GET("/test1", myfunc.Test1)
    13. r.Run()
    14. }

    myfunc.go

    1. package myfunc
    2. import (
    3. "github.com/gin-gonic/gin"
    4. "test_gin/part07/logs_ope"
    5. )
    6. func Test1(context *gin.Context) {
    7. logs_ope.Logrus.Info("打开画面demo01/hello01.html")
    8. //获取路径中的参数值:
    9. context.HTML(200, "demo01/hello01.html", nil)
    10. }

    hello01.html

    1. {{define "demo01/hello01.html"}}
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <form action="/toFormBind" >
    9. 用户名:<input type="text" name="username">
    10. 密码:<input type="password" name="pwd">
    11. <input type="submit" value="提交">
    12. form>
    13. body>
    14. html>
    15. {{end}}

    测试:

    Web framework-Gin(二)

    一切都是假的,一切又都是真的!

    努力就是自己找苦难!

  • 相关阅读:
    idea-git配置用户名和邮箱
    排序算法,思想+C语言代码
    云计算学习8——OpenStack高级运维企业实战竞赛题目
    生产管理系统
    SolidUI社区-Huggingface Spaces
    CKA场景题
    如何将Windows 10升级到Windows11 22H2?
    Ubuntu14.04离线安装gcc-5.3.0
    sitk::ERROR: No ImageJ/Fiji application found.
    你知道网警和黑客谁更厉害吗?看完这篇文章你就有答案了。
  • 原文地址:https://blog.csdn.net/weixin_42472027/article/details/132928056