# log4go **Repository Path**: haming123/log4go ## Basic Information - **Project Name**: log4go - **Description**: log4go是用GO语言实现的一个简单高效、支持文件轮换以及日志分级的日志SDK - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-11-30 - **Last Updated**: 2022-06-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: 日志, Go语言, logging ## README # log4go #### 介绍 log4go是用GO语言实现的一个简单高效、支持文件轮换以及日志分级的日志SDK。其特征如下: 1)采用buffered file,满足高性能输出日志。 2)支持日志分级,具体分级如下: fatal (log4go.LOG_FATAL) error (log4go.LOG_ERROR) warn (log4go.LOG_WARN) info (log4go.LOG_INFO) debug (log4go.LOG_DEBUG) 3)支持Console writer以及File writer。 4)File writer支持按照天或小时进行轮换输出。 #### 安装说明 go get github.com/haming123/log4go #### 输出日志到终端 log4go的缺省日志类型为:TermLogger(终端日志类型),使用TermLogger时不需要初始化,可直接使用日志输出函数输出日志。 ```go package main import "log4go" func main() { log4go.Debug("This is a Debug Message") log4go.Info("This is a Info Message") } //执行后的输出结果为: //2021/11/30 07:20:06 [D] main.go:31 This is a Debug Message //2021/11/30 07:20:06 [I] main.go:32 This is a Debug Info ``` #### 日志级别 log4go支持5个日志级别,分别是:fatal、error、warn、info、debug。 ```go package main import "log4go" func main() { log4go.Debug("This is Debug Message") log4go.Info("This is Info Message") log4go.Warn("This is Warn Message") log4go.Error("This is Error Message") log4go.Fatal("This is Fatal Message") } ``` #### 日志的格式化输出 log4go支持为每个级别的日志提供了一个xxxxf的函数,用于日志的格式化输出: ```go package main import "log4go" func main() { log4go.Debugf("This is a %s Message", "Debug") log4go.Infof("This is a %s Message", "Info") } ``` #### 输出日志到文件 FileLogger是log4go提供的一种将日志输出到文件的日志类型。使用FileLogger日志类型前需要对FileLogger进行初始化,需要为FileLogger指定日志文件的存放目录以及日志文件的轮换方式。 日志文件可以按照天(log4go.ROTATE_DAY)或小时(log4go.ROTATE_HOUR)进行进行轮换。 ```go package main import "log4go" func main() { log4go.InitFileLogger("./logs", log4go.LOG_DEBUG) defer log4go.GetDefaultLogger().Close() log4go.Debug("This is a Debug Message") log4go.Info("This is a Debug Info") } ``` log4go为了提高日志组件的性能,采用了基于buffer的文件输出,因此在系统退出前需要调用Close()函数将buffer中的数据刷新到文件中。 #### 关闭源码信息的输出 log4go缺省会在日志中输出源码所在的文件以及源码的行号,若不需要显示源码信息,可以使用函数:ShowCaller(show bool)来关闭源码信息的输出。 ```go package main import "log4go" func main() { log4go.InitFileLoggerHour("./logs", log4go.LOG_DEBUG) log4go.GetDefaultLogger().ShowCaller(false) defer log4go.GetDefaultLogger().Close() log4go.Debug("This is a Debug Message") log4go.Info("This is a Debug Info") } ``` #### 性能指标 1. 显示caller ```go goos: windows goarch: amd64 BenchmarkFileLog BenchmarkFileLog-6 983985 1079 ns/op 4 allocs/op ``` 2. 不显示caller ```go goos: windows goarch: amd64 BenchmarkFileLogNoCaller BenchmarkFileLogNoCaller-6 6514368 172.3 ns/op 0 allocs/op ```