当前封装基于工程项目,目录结构为下图
1.log日志属于工具类包所以我们在utils目录下创建相关目录以及文件
package logs
import "github.com/sirupsen/logrus"
//定义各级别日志的函数
func Debug(fields map[string]interface{}, msg string){
/*
接收参数解释:查看logrus 用法得知withfields 接收是个map类型
但是由于我们日志类型可一有 int 、string 所以map key的类型为string
value 类型为interface,Debug() 则为描述信息定义为 string类型即可
*/
logrus.WithFields(fields).Debug(msg)
}
func Info(fields map[string]interface{}, msg string){
/*
接收参数解释:查看logrus 用法得知withfields 接收是个map类型
但是由于我们日志类型可一有 int 、string 所以map key的类型为string
value 类型为interface,Debug() 则为描述信息定义为 string类型即可
*/
logrus.WithFields(fields).Info(msg)
}
2.配置日志格式以及级别等事项,编辑config目录文件
// 由于golang的特性在导入包时会自动加载init函数所以这里创还能init函数作为配置
package config
import (
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
"go_kuan/utils/logs"
)
// 时间格式化可能会很多地方用到这里事先定义常量
const (
TimeFormat string = "2006-01-02 15:04:05"
)
// 代码规范一个函数不宜编写过多代码另起一个函数编写日志配置
func initLogConfig(loglevel string){
//配置程序日志输出级别
if loglevel == "debug"{
logrus.SetLevel(logrus.DebugLevel)
}else {
logrus.SetLevel(logrus.InfoLevel)
}
// 设置日志输出的文件名以及行号
logrus.SetReportCaller(true)
// 输出格式改为jsons 时间并格式化
logrus.SetFormatter(&logrus.JSONFormatter{TimeStampFormat: TimeFormat})
}
// 这里init 不需要首字母大写 golang 的特性在导入包时会自动加载
func init(){
// 设置一个默认值如果系统没有这个日志级别
viper.SetDefault("LOG_LEVEL","debug")
viper.AutomaticEnv()
logLevel := viper.GetSting("LOG_LEVEL")
// 加载日志输出格式
intLogConfig(logLevel)
}