支持file、console、net和smtp作为目标提供程序。它是这样安装的:
go get github.com/beego/beego/v2/core/logs
import (
"github.com/beego/beego/v2/core/logs"
)
初始化日志变量(10000是缓存大小):
log := logs.NewLogger(10000)
然后添加输出提供程序(它支持同时向多个提供程序输出)。第一个参数是提供程序名称(console、file、multifile、conn、smtp或es)。
log.SetLogger("console")
第二个参数是特定于提供程序的配置字符串
logs.SetLogger(logs.AdapterFile,{"filename":"project.log","level":7,"maxlines":0,"maxsize":0,"daily":true,"maxdays":10,"color":true})
然后我们可以在代码中使用它:
package main
import (
"github.com/beego/beego/v2/core/logs"
)
func main() {
//an official log.Logger
l := logs.GetLogger()
l.Println("this is a message of http")
//an official log.Logger with prefix ORM
logs.GetLogger("ORM").Println("this is a message of orm")
logs.Debug("my book is bought in the year of ", 2016)
logs.Info("this %s cat is %v years old", "yellow", 3)
logs.Warn("json is a type of kv like", map[string]int{"key": 2016})
logs.Error(1024, "is a very", "good game")
logs.Critical("oh,crash")
}
Beego /logs支持声明一个要使用的日志记录器
package main
import (
"github.com/beego/beego/v2/core/logs"
)
func main() {
log := logs.NewLogger()
log.SetLogger(logs.AdapterConsole)
log.Debug("this is a debug message")
}
该模块可以配置为在日志输出中包含日志调用的文件和行号。此功能在默认情况下是禁用的,但可以使用以下代码启用:
logs.EnableFuncCallDepth(true)
使用true打开文件和行号登录,false关闭。默认为false。
如果您的应用程序封装了对日志方法的调用,则可能需要使用SetLogFuncCallDepth来设置在检索调用者信息之前要跳过的堆栈帧数。默认值是2。
logs.SetLogFuncCallDepth(3)
您可以将logger设置为异步日志记录以提高性能:
logs.Async()
添加一个参数来设置缓冲区通道日志的长度。
每个提供程序都支持一组配置选项。
可以设置输出级别或使用默认值。使用操作系统。默认为标准输出。
logs.SetLogger(logs.AdapterConsole, `{"level":1}`)
logs.SetLogger(logs.AdapterFile, `{"filename":"test.log"}`)
参数:
logs.SetLogger(logs.AdapterMultiFile, ``{"filename":"test.log","separate":["emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"]}``)
参数:
logs.SetLogger(logs.AdapterConn, `{"net":"tcp","addr":":7020"}`)
参数:
logs.SetLogger(logs.AdapterMail, `{"username":"beegotest@gmail.com","password":"xxxxxxxx","host":"smtp.gmail.com:587","sendTos":["xiemengjun@gmail.com"]}`)
Parameters:
logs.SetLogger(logs.AdapterEs, `{"dsn":"http://localhost:9200/","level":1}`)
logs.SetLogger(logs.AdapterJianLiao, `{"authorname":"xxx","title":"beego", "webhookurl":"https://jianliao.com/xxx", "redirecturl":"https://jianliao.com/xxx","imageurl":"https://jianliao.com/xxx","level":1}`)
logs.SetLogger(logs.AdapterSlack, `{"webhookurl":"https://slack.com/xxx","level":1}`)
beego 2.0版本的一个新特性是能够在日志发送到首选适配器之前对其应用自定义格式。下面是一个使用它的例子:
package main
import (
"fmt"
beego "github.com/beego/beego/v2/pkg"
"github.com/beego/beego/v2/pkg/logs"
)
type MainController struct {
beego.Controller
}
func customFormatter(lm *logs.LogMsg) string {
return fmt.Sprintf("[CUSTOM FILE LOGGING] %s", lm.Msg)
}
func GlobalFormatter(lm *logs.LogMsg) string {
return fmt.Sprintf("[GLOBAL] %s", lm.Msg)
}
func main() {
beego.BConfig.Log.AccessLogs = true
// GlobalFormatter only overrides default log adapters. Hierarchy is like this:
// adapter specific formatter > global formatter > default formatter
logs.SetGlobalFormatter(GlobalFormatter)
logs.SetLogger("console", "")
logs.SetLoggerWithOpts("file", []string{`{"filename":"test.json"}`}, customFormatter)
beego.Run()
}
使用全局格式化程序,您可以覆盖和默认日志格式化程序。这意味着设置全局格式化程序将覆盖任何log . setlogger()适配器,但不会覆盖和logs.SetLoggerWithOpts()适配器。默认的日志格式化程序是使用以下语法设置的任何适配器:
logs.SetLogger("adapterName", '{"key":"value"}')
适配器特定的格式化程序
可以设置适配器特定的格式化程序,并将覆盖为给定适配器设置的任何默认或全局格式化程序。适配器特定的日志格式化程序可以使用以下语法进行设置:
logs.SetLoggerWithOpts("adapterName", []string{'{"key":"value"}'}, utils.KV{Key:"formatter", Value: formatterFunc})
参考文章: