目录
一、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/logrus2、日志配置文件
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(二)
一切都是假的,一切又都是真的!
努力就是自己找苦难!



















