log4go尝鲜
2017年11月21日 · 101 字 · 1 分钟
序言
日志系统对于软件是必不可少的,可以帮助我们记录关键信息,后期处理问题的时候会很方便。业界有很多出名的日志库,log4日志库相信每个人都不陌生,像log4j之于Java,log4php之于PHP等等。其实golang也有很多的log4实现,本文要使用的是alecthomas实现的版本。
项目地址
https://github.com/alecthomas/log4go
安装
go get github.com/alecthomas/log4go
使用代码配置
新建golang项目
在项目根目录下新建main.go文件,代码如下
package main import "github.com/alecthomas/log4go" func main() { defer log4go.Close() log4go.AddFilter("stdout", log4go.DEBUG, log4go.NewConsoleLogWriter()) // DEBUG级别+打印到控制台 log4go.AddFilter("file", log4go.INFO, log4go.NewFileLogWriter("test.log", true)) // INFO级别+输出到文件,并开启rotate log4go.Debug("这是DEBUG日志") // 输出测试 log4go.Info("这是INFO日志") // 输出测试 }
如果程序是守护进程,此处不用调用log4go.Close,因为log4go使用协程异步写入日志,此处可以调用log4go.Close也可以Sleep来实现写入,下文会有Sleep测试
go run main.go
此时可以看到终端输出,还可以发现项目目录下生成了test.log文件
[17:11:35 CST 2017/11/21] [DEBG] (main.main:9) 这是DEBUG日志 [17:11:35 CST 2017/11/21] [INFO] (main.main:10) 这是INFO日志
重新执行时可以发现test.log被rotate到了test.log.1
使用配置文件
log4go支持使用xml来作为配置文件
在项目根目录新建log4go.xml
<logging> <filter enabled="true"> <tag>stdout</tag> <type>console</type> <level>DEBUG</level> </filter> <filter enabled="true"> <tag>file</tag> <type>file</type> <level>INFO</level> <property name="filename">test.log</property> <property name="rotate">true</property> <property name="maxlines">2</property> <property name="daily">true</property> </filter> </logging>
添加了console和file两个filter,跟代码添加其实是一样的,不同的是xml的可配置性更高。具体配置参数需要查看log4go对应的go源文件
修改main.go
package main import ( "github.com/alecthomas/log4go" "time" ) func main() { log4go.LoadConfiguration("log4go.xml") log4go.Debug("这是DEBUG日志") log4go.Info("这是INFO日志") time.Sleep(time.Second) }
运行程序,终端依旧正确输出,同时也会生成test.log
后记
log4go良好的设计带来了简洁又强大的使用体验,更多的使用细节以及更多的logger类型等待读者去发掘与实现,本文只做一个简单的介绍,即便如此也应该能够应付大部分场景了。