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() // 创建一个日志记录器,参数为缓冲区的大小
log.SetLogger(logs.AdapterFile,`{"filename":"logs/error.log","level":,"maxlines":,"maxsize":,"daily":true,"maxdays":,"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,看到如下:

// ::14.566 [M] [test.go:]  Emergency
// ::14.566 [A] [test.go:] Alert
// ::14.566 [C] [test.go:] Critical
// ::14.566 [E] [test.go:] Error
// ::14.566 [W] [test.go:] Warning
// ::14.566 [N] [test.go:] Notice
// ::14.566 [I] [test.go:] Informational
// ::14.566 [D] [test.go:] Debug
// ::03.280 [M] [dict.go:] Emergency
// ::03.280 [A] [dict.go:] 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":}`)

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

最新文章

  1. 球谐光照(Spherical Harmonics Lighting)及其应用-实验篇
  2. ngnix 502 bad gateway 的解决办法之空间满了
  3. finetuning caffe
  4. ruby -- 基础学习(九)filename去除扩展名
  5. C++中的memset()函数 ------------转自:http://www.360doc.com/content/10/1006/18/1704901_58866679.shtml
  6. 【对象模型】C++模版的编译链接过程——编译器真的会检查所有tocken层面的错误么?
  7. 统计机器学习(statistical machine learning)
  8. 010.Controller methods and views --【控制器方法与视图】
  9. 关于UIView用户交互相关的属性和方法
  10. word20170101厨房家电kitchen appliances
  11. A - Alice&#39;s Print Service ZOJ - 3726 (二分)
  12. Unix代码分析
  13. 我了解到的新知识之—Apple Captive Portal 网页认证登陆公共Wifi
  14. UI自动化(八)xpath
  15. tips___代码规范
  16. 委托、Lambda表达式、事件系列02,什么时候该用委托
  17. oauth2-server-php-docs 集成3
  18. Ubuntu下命令行安装jdk,android-studio,及genymotion虚拟机来进行android开发
  19. ThinkCMF Volist标签
  20. 关于去掉输入一定数字n,在n后写入n个字符串的问题

热门文章

  1. SDUT OJ I样(0-1背包问题 【模板】)
  2. SDUT 2133 数据结构实验之栈三:后缀式求值
  3. stack_1.设计一个有getMin功能的栈
  4. CodeForces -163E :e-Government (AC自动机+DFS序+树状数组)
  5. ACM学习历程—Hihocoder 1178 计数(位运算 &amp;&amp; set容器)(hihoCoder挑战赛12)
  6. VirtualBox文件系统已满--磁盘扩容
  7. bzoj 1510 [POI2006]Kra-The Disks——思路
  8. 数据库和ADO
  9. java对世界各个时区(TimeZone)的通用转换处理方法
  10. Zigbee协议栈--Z-Stack的使用