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.")
        }
    }
}

  

posted @   明王不动心  阅读(5625)  评论(0编辑  收藏  举报
编辑推荐:
· 基于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 查看一张表的信息
点击右上角即可分享
微信分享提示