日志对于软件来说是必不可少的, 可以帮助我们记录关键信息, 后期处理问题的时候会很方便. 业界有很多出名的日志库, log4 日志库相信每个人都不陌生, 像 log4j 之于 Java,log4php 之于 PHP 等等. 其实 Go 也有很多的 log4 实现, 本节中, 我们将使用 alecthomas 版本的 https://github.com/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 文件需要和可执行文件在同一目录中.
日志文件
小结
本小节通过具体实例介绍了如何配置, 使用和管理日志.
来源: https://juejin.im/entry/5b69b280f265da0f491bca01