GO语言里的Log4j

前言

go语言中的函数(GO语言里的Log4j)(1)

Log4j是Java语言里提供日志处理的一个常见的包, 通过Log4j的API的调用,开发者可以很方便的在程序里实现日志的打印和记录的功能;同样的在GO语言的项目里,有时也需要一些处理日志输出和记录的功能要求;在GO语言里也内置了log包实现了简单的日志服务;来处理简单的日志处理,GO语言里也有logrus,zap这样功能较全面一些的日志处理库, 来处理复杂场景下的日志业务, log功能过于简单,logrus,zap使用起来又过于复杂;今天这个文章咱们介绍一个GO语言里用来处理日志的一个工具包log4go;这个工具即log包一样使用起来简单易用,又能进行一些较复杂业务的场景需求。

Log4GO的项目包地址

GITHUB.com/gohutool/log4go

在项目中通过

import ( "github.com/gohutool/log4go" )

就可以将log4go这个工具包引入到自己的项目里。

Log4GO日志格式及输出的配置

笔者多年的Java开发情节,特别喜欢log4go也提供了类似于log4j一样的日志配置方式

<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender enabled="true" name="console"> <type>console</type> <pattern>[%D %T] [%L] (%S) %M</pattern> <!-- level is (:?FINEST|FINE|DEBUG|TRACE|INFO|WARNING|ERROR) --> </appender> <!-- 输出级别是info级别及以上的日志,下面的ref关联的两个appender没有filter设置, 所以,info及以上的日志都是会输出到这2个appender的 --> <root> <level>info</level> <appender-ref ref="testfile" /> <appender-ref ref="logstash" /> </root> </configuration>

配置项目简单而清晰;非常容易理解,非常容易修改调整为自己的项目所用。在配置文件里,可以指定日志的输出级别,日志记录的方式,日志输出的格式,日志追踪的范围等等。 修改不同的配置项,实现不同的输出效果。

Log4GO的使用

完整的log4go的接口文档;可以访问以下网址

http://log4go.googlecode.com

Log4GO的日志输出方式,采用的是异步日志输出的方式,日志的输出不影响主要业务程序的调用性能;

使用Log4go的代码

import ( "github.com/gohutool/log4go" "testing" "time" ) var logger = log4go.LoggerManager.GetLogger("com.hello") func TestLoggerExample(t *testing.T) { log4go.LoggerManager.InitWithXML("./example.xml") logger.Info("hello") logger.Info("hello") time.Sleep(1 * time.Second) logger.Error("hello") time.Sleep(3 * time.Second) }

输出的效果

[2022/04/06 15:17:59 CST 299] [INFO][com.hello] (github.com/gohutool/log4go/examples.TestLoggerExample:73) hello

[2022/04/06 15:17:59 CST 299] [INFO][com.hello] (github.com/gohutool/log4go/examples.TestLoggerExample:72) hello

[2022/04/06 15:18:00 CST 299] [EROR][com.hello] (github.com/gohutool/log4go/examples.TestLoggerExample:75) hello

Log4GO多种输出方式

Log4GO除了支持标准控制台输出的方式,还内置了文件输出方式, XML输出方式,TCP/IP协议输出方式,和UDP协议输出方式;同时还非侵入式的扩展方式,来扩展新的输出方式

文件输出

go语言中的函数(GO语言里的Log4j)(2)

UDP日志支持

go语言中的函数(GO语言里的Log4j)(3)

配置方式

<appender enabled="true" name="logstash"><!-- enabled=false means this logger won't actually be created --> <type>socket</type> <pattern>[%D %T %m] [%L][%l] (%S) %M</pattern> <property name="endpoint">192.168.56.1:12124</property> <!-- recommend UDP broadcast --> <property name="protocol">udp</property> <!-- TCP or udp --> </appender>

TCP日志支持

go语言中的函数(GO语言里的Log4j)(4)

配置方式

<appender enabled="true" name="logstash"><!-- enabled=false means this logger won't actually be created --> <type>socket</type> <pattern>[%D %T %m] [%L][%l] (%S) %M</pattern> <property name="endpoint">192.168.56.1:12124</property> <!-- recommend UDP broadcast --> <property name="protocol">tcp</property> <!-- tcp or udp --> <property name="retry">-1</property> <!-- 断线重连,设置为负数,反复重连,设置为正数,重连测试后失败 --> <property name="interval">30</property> <!-- 失败重连的间隔时间,默认30秒 --> <property name="check">false</property> <!-- 启动日志是否检查连接成功,如果检查,不成功会失败 --> </appender>

更多信息可从GITHUB中获取

http://github.com/gohutool/log4go

go语言中的函数(GO语言里的Log4j)(5)

,