本文为转载,原文地址:Beego学习笔记——Logs
日志处理
这是一个用来处理日志的库,它的设计思路来自于database/sql
,目前支持的引擎有file、console、net、smtp,可以通过如下方式进行安装:
go get github.com/astaxie/beego/logs
如何使用
首先引入包:
import (
"github.com/astaxie/beego/logs"
)
然后初始化log变量(10000表示缓存的大小):
log := NewLogger(10000)
然后添加输出引擎(log支持同时输出到多个引擎),这里我们以console为例,第一个参数是引擎名(包括:console、file、conn、smtp),第二个参数表示配置信息,详细的配置请看下面介绍:
log.SetLogger("console", "")
然后我们就可以在我们的逻辑中开始任意的使用了
引擎配置设置
-
console
可以设置输出的级别,或者不设置保持默认,默认输出到
os.Stdout
log := NewLogger(10000) log.SetLogger("console", `{"level":1}`)
-
file
设置的例子如下所示:
log := NewLogger(10000) log.SetLogger("file", `{"filename":"test.log"}`)
主要的参数如下说明:
-
- filename 保存的文件名
- maxlines 每个文件保存的最大行数,默认值1000000
- maxsize 每个文件保存的最大尺寸,默认值是1 << 28, //256 MB
- daily 是否按照每天logrotate,默认是true
- maxdays 文件最多保存多少天,默认保存7天
- rotate 是否开启logrotate,默认是true
- level 日志保存的时候的级别,默认是Trace级别
-
conn
网络输出,设置的例子如下所示:
log := NewLogger(1000) log.SetLogger("conn", `{"net":"tcp","addr":":7020"}`)
主要的参数说明如下:
-
- reconnectOnMsg 是否每次链接都重新打开链接,默认是false
- reconnect 是否自动重新链接地址,默认是false
- net 发开网络链接的方式,可以使用tcp、unix、udp等
- addr 网络链接的地址
- level 日志保存的时候的级别,默认是Trace级别
-
smtp
邮件发送,设置的例子如下所示:
log := NewLogger(10000) log.SetLogger("smtp", `{"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级别
接下来,我们再研究下在我们的学习中如何去使用这个功能。在这里只针对console和file这两种引擎进行解析。
首先在utils目录下新建个blogs.go文件。在这个文件中,需要对log进行初始化,具体代码如下:

package utils import "github.com/astaxie/beego/logs" var ConsoleLogs *logs.BeeLogger var FileLogs *logs.BeeLogger func init(){ ConsoleLogs = logs.NewLogger(1000) ConsoleLogs.SetLogger("console") FileLogs = logs.NewLogger(1000) FileLogs.SetLogger("file",`{"filename":”logs/test.log"}`) }
现在就在main.go函数里调用下试试吧,代码如下:
func main() { utils.ConsoleLogs.Info("this is a console log with info.") utils.ConsoleLogs.Debug("this is a console log with debug.") utils.ConsoleLogs.Alert("this is a console log with alert.") utils.ConsoleLogs.Error("this is a console log with error.") utils.ConsoleLogs.Trace("this is a console log with trace.") utils.FileLogs.Info("this is a file log with info.") utils.FileLogs.Debug("this is a file log with debug.") utils.FileLogs.Alert("this is a file log with alert.") utils.FileLogs.Error("this is a file log with error.") utils.FileLogs.Trace("this is a file log with trace.") r := bufio.NewReader(os.Stdin) handlers := GetCommandHandlers() Help(nil) for { fmt.Print("Command> ") b, _, _ := r.ReadLine() line := string(b) tokens := strings.Split(line, " ") if handler, ok := handlers[tokens[0]]; ok{ ret := handler(tokens) if ret != 0{ break } }else { fmt.Println("Unknown Command:", tokens[0]) } } }
console下的日志如下图:

file下的日志如下图

最终的工程目录如下: