zoukankan      html  css  js  c++  java
  • go系列(6)- beego日志模块的使用

     1.安装日志模块

    切换到工作目录,下载日志模块

    cd /data/work/go/
    go get github.com/astaxie/beego/logs

    2.导入日志模块

    使用的时候,需要导入模块

    import (
        "github.com/astaxie/beego/logs"
    )

    3.设置参数

    输出文件名和行号,日志默认不输出调用的文件名和文件行号,如果你期望输出调用的文件名和文件行号,可以如下设置

    logs.EnableFuncCallDepth(true)

    开启传入参数 true,关闭传入参数 false,默认是关闭的

    4.日志处理

    这是一个用来处理日志的库,它的设计思路来自于 database/sql,目前支持的引擎有 file、console、net、smtp

    (1)console,命令行输出,输出到终端

    package controllers
    
    import (
        "github.com/astaxie/beego"
        "github.com/astaxie/beego/logs"
    )
    
    type TestController struct {
        beego.Controller
    }
    
    
    func (c *TestController) GetData() {
        log := logs.NewLogger()
        log.SetLogger(logs.AdapterConsole)
        log.Debug("this is a debug message")
        log.Alert("Alert")
        log.Critical("Critical")
    }

    在终端执行时,看到以下输出:

    (2)file,日志输出到文件

    package controllers
    
    import (
        "github.com/astaxie/beego"
        "github.com/astaxie/beego/logs"
    )
    
    type TestController struct {
        beego.Controller
    }
    
    
    func (c *TestController) GetData() {
        log := logs.NewLogger(10000) // 创建一个日志记录器,参数为缓冲区的大小    
        log.SetLogger(logs.AdapterFile,`{"filename":"logs/error.log","level":7,"maxlines":0,"maxsize":0,"daily":true,"maxdays":10,"color":true}`)
        log.SetLevel(logs.LevelDebug)     // 设置日志写入缓冲区的等级
        log.EnableFuncCallDepth(true)     // 输出log时能显示输出文件名和行号(非必须)
    
        log.Emergency("Emergency")
        log.Alert("Alert")
        log.Critical("Critical")
        log.Error("Error")
        log.Warning("Warning")
        log.Notice("Notice")
        log.Informational("Informational")
        log.Debug("Debug")
    
        log.Flush() // 将日志从缓冲区读出,写入到文件
        log.Close()
    }

    备注:如果log.SetLevel(logs.LevelDebug)修改为log.SetLevel(logs.LevelEmergency),则只输出Emergency级别的log,其他级别的log不会输出。
     

    执行,打开error.log,看到如下:

    2019/02/15 11:47:14.566 [M] [test.go:23]  Emergency
    2019/02/15 11:47:14.566 [A] [test.go:24]  Alert
    2019/02/15 11:47:14.566 [C] [test.go:25]  Critical
    2019/02/15 11:47:14.566 [E] [test.go:26]  Error
    2019/02/15 11:47:14.566 [W] [test.go:27]  Warning
    2019/02/15 11:47:14.566 [N] [test.go:28]  Notice
    2019/02/15 11:47:14.566 [I] [test.go:29]  Informational
    2019/02/15 11:47:14.566 [D] [test.go:30]  Debug
    2019/02/15 11:51:03.280 [M] [dict.go:70]  Emergency
    2019/02/15 11:51:03.280 [A] [dict.go:71]  Alert

    各个参数的意思如下:

    • filename 保存的文件名
    • maxlines 每个文件保存的最大行数,默认值 1000000
    • maxsize 每个文件保存的最大尺寸,默认值是 1 << 28, //256 MB
    • daily 是否按照每天 logrotate,默认是 true
    • maxdays 文件最多保存多少天,默认保存 7 天
    • rotate 是否开启 logrotate,默认是 true
    • level 日志保存的时候的级别,默认是 Trace 级别
    • perm 日志文件权限

    (3)multifile

    logs.SetLogger(logs.AdapterMultiFile, `{"filename":"test.log","separate":["emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"]}`)

    主要的参数如下说明(除 separate 外,均与file相同):

    • filename 保存的文件名
    • maxlines 每个文件保存的最大行数,默认值 1000000
    • maxsize 每个文件保存的最大尺寸,默认值是 1 << 28, //256 MB
    • daily 是否按照每天 logrotate,默认是 true
    • maxdays 文件最多保存多少天,默认保存 7 天
    • rotate 是否开启 logrotate,默认是 true
    • level 日志保存的时候的级别,默认是 Trace 级别
    • perm 日志文件权限
    • separate 需要单独写入文件的日志级别,设置后命名类似 test.error.log

    (4)smtp,邮件发送

    logs.SetLogger(logs.AdapterMail, `{"username":"beegotest@gmail.com","password":"xxxxxxxx","host":"smtp.gmail.com:587","sendTos":["xiemengjun@gmail.com"]}`)

    主要的参数说明如下:

    • username smtp 验证的用户名
    • password smtp 验证密码
    • host 发送的邮箱地址
    • sendTos 邮件需要发送的人,支持多个
    • subject 发送邮件的标题,默认是 Diagnostic message from server
    • level 日志发送的级别,默认是 Trace 级别

    (5)ElasticSearch,输出到ElasticSearch

    logs.SetLogger(logs.AdapterEs, `{"dsn":"http://localhost:9200/","level":1}`)

    5.日志级别 

    LevelEmergency = iota // 紧急级别
    LevelAlert            // 报警级别
    LevelCritical         // 严重错误级别
    LevelError            // 错误级别
    LevelWarning          // 警告级别
    LevelNotice           // 注意级别
    LevelInformational    // 报告级别
    LevelDebug            // 除错级别

    官方文档:https://beego.me/docs/module/logs.md

    https://www.cnblogs.com/hezhixiong/p/4607365.html

    https://blog.csdn.net/huwh_/article/details/77923570

  • 相关阅读:
    pyhon3 mysql的下载和配置
    python3 进程池和线程池
    python3 udp socketserver
    python3 多进程实现socket通讯
    python3 在一个进程内开启多个线程实现socket通讯
    python3 单线程(gevent)实现并发的socket通讯
    python3 协程gevent模块(遇到IO自动切换)
    python3 greenlet模块
    python3 协程函数yeild
    python3 线程队列queue
  • 原文地址:https://www.cnblogs.com/kumufengchun/p/10384325.html
Copyright © 2011-2022 走看看