之前使用过go自带的log
和seelog
日志,后来又发现一个好用的日志beego日志模块。
在原有的日志中加入了一个tag,只要设置要显示的tag后才会打印出日志,没有设置的tag不显示。
1、安装
go get github.com/beego/beego/v2/core/logs
2、引入包
import (
"github.com/beego/beego/v2/core/logs"
)
3、初始化配置
func init() {
Log = logs.NewLogger(200)
// 日志输出调用的文件名和文件行号,默认为false
Log.EnableFuncCallDepth(true)
// 如果你的应用自己封装了调用 log 包,那么需要设置 SetLogFuncCallDepth
// 默认是 2,也就是直接调用的层级,如果你封装了多层,那么需要根据自己的需求进行调整.
Log.SetLogFuncCallDepth(3)
}
4、设置日志文件
var Tags = make(map[string]bool)
// 初始化日志参数
// logWay: file-输出到文件;console-输出到控制台
// logFile: 日志文件
// logLevel: 日志等级
// maxDays: 日志保留天数
// disableLogColor: 是否显示颜色
// tags: 日志显示tag
func InitLog(logWay string, logFile string, logLevel string, maxDays int64, disableLogColor bool, tags []string) {
setLogFile(logWay, logFile, maxDays, disableLogColor)
setLogLevel(logLevel)
setTags(tags)
}
// 设置显示tag
func setTags(tags []string) {
if tags != nil {
for _, tag := range tags {
Tags[tag] = true
}
}
}
// 设置日志文件参数
// logWay: file or console
func setLogFile(logWay string, logFile string, maxdays int64, disableLogColor bool) {
if logWay == "console" {
params := ""
if disableLogColor {
params = fmt.Sprintf(`{"color": false}`)
}
_ = Log.SetLogger("console", params)
} else {
params := fmt.Sprintf(`{"filename": "%s", "maxdays": %d}`, logFile, maxdays)
_ = Log.SetLogger("file", params)
}
}
// 设置日志显示等级
// value: error, warning, info, debug, trace
func setLogLevel(logLevel string) {
level := 4 // warning
switch logLevel {
case "error":
level = 3
case "warn":
level = 4
case "info":
level = 6
case "debug":
level = 7
case "trace":
level = 8
default:
level = 4
}
Log.SetLevel(level)
}
// 获取tag是否显示
func getTag(tag string) (msg string, show bool) {
if _, ok := Tags[tag]; !ok {
return
}
msg = "[Tag:"+tag+"] "
show = true
return
}
5、日志接口封装
// wrap log
func Error(tag, format string, v ...interface{}) {
tag, show := getTag(tag)
if show {
Log.Error(tag+format, v...)
}
}
func Warn(tag,format string, v ...interface{}) {
tag, show := getTag(tag)
if show {
Log.Warn(tag+format, v...)
}
}
func Info(tag,format string, v ...interface{}) {
tag, show := getTag(tag)
if show {
Log.Info(tag+format, v...)
}
}
func Debug(tag,format string, v ...interface{}) {
tag, show := getTag(tag)
if show {
Log.Debug(tag+format, v...)
}
}
func Trace(tag,format string, v ...interface{}) {
tag, show := getTag(tag)
if show {
Log.Trace(tag+format, v...)
}
}
6、测试
package main
import (
"github.com/zngw/log"
)
func main() {
// 不设置显示tag
// log.Init("",nil)
// 初始化日志
log.InitLog("file","logs/file.log","trace",30,true,[]string{"sys","net"})
// 输出日志: 2019-11-15 01:06:01.215 [D] [main.go:15] [Tag:sys] [Hello World]
log.Trace("sys","Hello World")
// 输出日志: 2019-11-15 01:06:01.215 [D] [main.go:18] [Tag:net] [Hello Golang]
log.Trace("net","Hello Golang")
// 这条日志不在显示的tag内,故不输出
log.Trace("test","Hello zngw")
// 输出错误日志: 2019-11-15 01:06:01.215 [E] [main.go:24] [Tag:net] [Error]
log.Error("sys","Error")
}
完整代码参考:https://github.com/zngw/log