目录
一、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
{
"log_dir": "D:/mylog.log",
"log_level": "info"
}
3、加载日志配置文件
logs_ope/log_load_config.go
package logs_ope
import (
"encoding/json"
"io/ioutil"
"os"
)
// 对应结构体:
type LogConfig struct {
LogDir string `json:"log_dir"`
LogLevel string `json:"log_level"`
}
// 读取配置文件:
func LoadLogConfig() *LogConfig {
log_conf := LogConfig{}
//打开文件:
file, err := os.Open("part07/confs/log_config.json")
if err != nil { //错误处理
panic(err)
}
//资源释放:
defer file.Close()
//用流读取文件中内容:
data, err2 := ioutil.ReadAll(file)
if err2 != nil {
panic(err2)
}
//Unmarshal将json字符串解码到对应的数据结构中:
//第一个参数:json字符串,第二个参数:接收json解析的数据结构
err3 := json.Unmarshal(data, &log_conf)
if err3 != nil {
panic(err3)
}
return &log_conf
}
4、初始化日志记录器
logs_ope/log_init.go
package logs_ope
import (
"github.com/sirupsen/logrus"
"os"
)
// 初始化记录器一个实例:
var Logrus = logrus.New()
func init() {
//先读取日志的配置文件:
log_conf := LoadLogConfig()
//设置日志的输出文件:
file, err := os.OpenFile(log_conf.LogDir, os.O_APPEND|os.O_CREATE, 0666)
if err != nil {
panic(err)
}
//将上面打开的file文件设置为 日志的输出文件:
Logrus.Out = file
//设置日志的级别:
//定义一个map,专门存储日志级别:
log_level_map := map[string]logrus.Level{
"trace": logrus.TraceLevel,
"panic": logrus.PanicLevel,
"fatal": logrus.FatalLevel,
"error": logrus.ErrorLevel,
"warn": logrus.WarnLevel,
"info": logrus.InfoLevel,
"debug": logrus.DebugLevel,
}
Logrus.SetLevel(log_level_map[log_conf.LogLevel])
//日志格式化:设置文本格式
Logrus.SetFormatter(&logrus.TextFormatter{})
}
5、在main.go中加载init函数
package main
import (
"github.com/gin-gonic/gin"
_ "test_gin/part07/logs_ope"
"test_gin/part07/myfunc"
)
func main() {
r := gin.Default()
r.LoadHTMLGlob("part07/templates/**/*")
//指定文件:
r.Static("/s", "part07/static")
r.GET("/test1", myfunc.Test1)
r.Run()
}
myfunc.go
package myfunc
import (
"github.com/gin-gonic/gin"
"test_gin/part07/logs_ope"
)
func Test1(context *gin.Context) {
logs_ope.Logrus.Info("打开画面demo01/hello01.html")
//获取路径中的参数值:
context.HTML(200, "demo01/hello01.html", nil)
}
hello01.html
{{define "demo01/hello01.html"}}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/toFormBind" >
用户名:<input type="text" name="username">
密码:<input type="password" name="pwd">
<input type="submit" value="提交">
</form>
</body>
</html>
{{end}}
测试:
Web framework-Gin(二)
一切都是假的,一切又都是真的!
努力就是自己找苦难!