zoukankan      html  css  js  c++  java
  • 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.")
            }
        }
    }
    

      

  • 相关阅读:
    汇总常用的jQuery操作Table tr td方法
    Windows消息目录
    DataGridView基本操作
    PCL,VTK及其依赖库的编译-十分详细
    Session 的生命周期
    TCP协议的问题
    projecteuler----&gt;problem=12----Highly divisible triangular number
    阿里电话面试问题----100万个URL怎样找到出现频率最高的前100个?
    hbase 增删改查 api 简单操作
    为什么要在css文件里定义 ul{margin:0;padding:0;}这个选择器?
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/10122401.html
Copyright © 2011-2022 走看看