beego——日志处理
beego的日志处理是基于logs模块搭建的,内置了一个变量BeeLogger,默认已经是logs.BeeLogger,初始化了console,也就是默认输出到console。
使用入门
一般在程序中我们使用如下的方式进行输出:
beego.Emergency("this is emergency")
beego.Alert("this is alert")
beego.Critical("this is critical")
beego.Error("this is error")
beego.Warning("this is warning")
beego.Notice("this is notice")
beego.Informational("this is informational")
beego.Debug("this is debug")
设置输出
我们的程序往往期望把信息输出到log中,现在设置输出到文件很方便,如下所示:
beego.SetLogger("file", `{"filename":"logs/test.log"}`)
这个默认情况就会同时输出到两个地方,一个console,一个file,如果只想输出到文件,就需要调用删除操作:
beego.BeeLogger.DelLogger("console")
设置级别
日志的级别分为八个:
LevelEmergency LevelAlert LevelCritical LevelError LevelWarning LevelNotice LevelInformational LevelDebug
级别依次降低,默认全部打印,但是一般我们在部署环境,可以通过设置界别设置日志级别:
beego.SetLevel(beego.LevelInformational)
输出文件名和行号
日志默认不输出调用的文件名的和行号,日过你期望调用的文件名和文件行号,可以如下设置:
beego.SetLogFuncCall(true)
开启传入参数true,关闭传入参数false,默认是关闭的。
下面是一个完整示例:
func internalCalculationFunc(x, y int) (result int, err error) {
beego.Debug("calculating z. x:", x, " y:", y)
z := y
switch {
case x == 3:
beego.Debug("x == 3")
panic("Failure.")
case y == 1:
beego.Debug("y == 1")
return 0, errors.New("Error!")
case y == 2:
beego.Debug("y == 2")
z = x
default:
beego.Debug("default")
z += x
}
retVal := z - 3
beego.Debug("Returning ", retVal)
return retVal, nil
}
func processInput(input inputData) {
defer func() {
if r := recover(); r != nil {
beego.Error("Unexpected error occurred: ", r)
outputs <- outputData{result: 0, error: true}
}
}()
beego.Informational("Received input signal. x:", input.x, " y:", input.y)
res, err := internalCalculationFunc(input.x, input.y)
if err != nil {
beego.Warning("Error in calculation:", err.Error())
}
beego.Informational("Returning result: ", res, " error: ", err)
outputs <- outputData{result: res, error: err != nil}
}
func main() {
inputs = make(chan inputData)
outputs = make(chan outputData)
criticalChan = make(chan int)
beego.Informational("App started.")
go consumeResults(outputs)
beego.Informational("Started receiving results.")
go generateInputs(inputs)
beego.Informational("Started sending signals.")
for {
select {
case input := <-inputs:
processInput(input)
case <-criticalChan:
beego.Critical("Caught value from criticalChan: Go shut down.")
panic("Shut down due to critical fault.")
}
}
}
浙公网安备 33010602011771号