日志对于软件来说是必不可少的,可以帮助我们记录关键信息,后期处理问题的时候会很方便。业界有很多出名的日志库,log4 日志库相信每个人都不陌生,像 log4j 之于Java,log4php 之于 PHP 等等。其实 Go 也有很多的 log4 实现,本节中,我们将使用 alecthomas 版本的 log4go。
安装
$go get github.com/alecthomas/log4go
使用
通过代码配置
1、新建 Go 项目
2、在 main.go 中使用
//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 级别,输出到 test.log 文件,并开启 rotate
log4go.Debug("DEBUG 日志") // 输出测试
log4go.Info("INFO 日志") // 输出测试
}
如果程序是守护进程,此处不用调用 `log4go.Close`,因为 log4go 使用协程异步写入日志,此处可以调用 `log4go.Close` 也可以 `Sleep` 来实现写入。
通过配置文件配置
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">debug.log</property>
<property name="rotate">true</property>
<property name="maxlines">2</property>
<property name="daily">true</property>
</filter>
</logging>
在这种方式中,main.go 中的使用方法需要改变为:
//main.go
package main
import ("alecthomas/log4go")
func main() {
defer log4go.Close()
log4go.AddFilter("stdout", log4go.DEBUG, log4go.NewConsoleLogWriter()) //输出到控制台,级别为 DEBUG
log4go.AddFilter("file", log4go.DEBUG, log4go.NewFileLogWriter("debug.log", false)) //输出到文件,级别为 DEBUG,文件名为 debug.log,每次追加该原文件
log4go.LoadConfiguration("log4go.xml") //使用加载配置文件
log.SetFlags(log.LstdFlags | log.Lshortfile | log.LUTC)
}
注意:在部署 API 服务端可执行文件时,log4go.xml 文件需要和可执行文件在同一目录中。
日志文件
小结
本小节通过具体实例介绍了如何配置、使用和管理日志。