本文共 1353 字,大约阅读时间需要 4 分钟。
log4go 是一个 Go 语言类似于 log4j 的日志包,源自 Google 的一次日志工程,现由社区维护。它通过重构 log4go 已停止更新,成为开发者日志记录的有力选择。
快速开始
go get github.com/jeanphorn/log4go
简单集成
import log "github.com/jeanphorn/log4go"var ( loggers log.Logger)func init() { loggers = log.NewLogger(log.INFO)}
详细配置
package mainimport ( "log4go" "time")var ( loggers *log4go.Logger)func init() { loggers = log4go.NewLogger(log4go.INFO) // 配置日志输出至文件 fileWriter := log4go.NewFileLogWriter("log/app.log", false, false) fileWriter.SetFormat("[%D %T] [%L] (%S) %M") fileWriter.SetRotate(true) fileWriter.SetRotateSize(10 << 20) // 10M字节 fileWriter.SetRotateMaxBackup(10) // 保留10个备份文件 fileWriter.SetRotateDaily(false) // 不按天切片 fileWriter.SetSanitize(true) loggers.AddFilter("app", log4go.INFO, fileWriter)}
日志输出问题
运行后发现本地文件中无日志生成,原因在于 log4go 采用 channel 暂存策略,打印日志的 goroutine 可能因主 goroutine 键合后立即退出而无法完成任务。解决方法是确保主 goroutine 等待打印完成。
在代码末尾添加 sleep 时间,确保打印 goroutine 得到足够执行时间。
func main() { initLog("test.log") log.Error("这是一个错误消息") time.Sleep(100 * time.Microsecond) log.Info("这是一个信息消息") time.Sleep(100 * time.Microsecond)}
考虑其他日志库选择?您可能忽略了很多关于性能和可靠性的细节。log4go 已经被证明可以胜任大型应用场景,且有活跃的开发者社区来支持。
转载地址:http://ckkjz.baihongyu.com/