beego——日志处理
beego的日志处理是基于logs模块搭建的,内置了一个变量BeeLogger,默认已经是logs.BeeLogger,初始化了console,也就是默认输出到console。
使用入门
一般在程序中我们使用如下的方式进行输出:
1 2 3 4 5 6 7 8 | 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中,现在设置输出到文件很方便,如下所示:
1 | beego.<strong>SetLogger</strong>( "file" , `{ "filename" : "logs/test.log" }`) |
这个默认情况就会同时输出到两个地方,一个console,一个file,如果只想输出到文件,就需要调用删除操作:
1 | beego.BeeLogger.DelLogger( "console" ) |
设置级别
日志的级别分为八个:
1 2 3 4 5 6 7 8 | LevelEmergency LevelAlert LevelCritical LevelError LevelWarning LevelNotice LevelInformational LevelDebug |
级别依次降低,默认全部打印,但是一般我们在部署环境,可以通过设置界别设置日志级别:
1 | beego.SetLevel(beego.LevelInformational) |
输出文件名和行号
日志默认不输出调用的文件名的和行号,日过你期望调用的文件名和文件行号,可以如下设置:
1 | beego.SetLogFuncCall(true) |
开启传入参数true,关闭传入参数false,默认是关闭的。
下面是一个完整示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | 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." ) } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2017-12-15 Redis重大版本
2017-12-15 MySQL——存储引擎
2017-12-15 Redis使用场景
2017-12-15 查看一张表的信息