GO语言里的Log4j go语言jwt
yuyutoo 2024-10-16 15:40 6 浏览 0 评论
GO语言里的Log4j
前言
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协议输出方式;同时还非侵入式的扩展方式,来扩展新的输出方式
文件输出
UDP日志支持
配置方式
<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日志支持
配置方式
<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
相关推荐
- MySQL中的数据类型(mysql数据类型有哪些,并举例)
-
MySQL中的数据类型...
- mysql窗口函数over中rows_MySQL窗口函数
-
下面的讲解将基于这个employee2表:mysql>SELECT*FROMemployee2;+----+-----------+------+---------+---------...
- 别再说你精通数据库,MySQL的设计和列类型选取真的很有讲究
-
总想写一篇MySQL的设计和列类型选取的文章,一直挤不出时间。天天晚上都要加班,正逢5.1放假,抽了几天就有了此文。如果对朋友们能有帮助的话,关注一波不过分吧?求关!选择更优的数据类型尽量选择存储空间...
- MySQL数据库知识(mysql数据库相关知识)
-
MySQL是一种关系型数据库管理系统;那废话不多说,直接上自己以前学习整理文档:查看数据库命令:(1).查看存储过程状态:showprocedurestatus;(2).显示系统变量:show...
- 数据库:MySQL 高性能优化规范建议
-
数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用MySQL保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,...
- MySQL实战——表结构设计之数字类型
-
整型不建议刻意去用unsigned属性,因为在做一些数据分析时,SQL可能返回的结果并不是想要得到的结果。比如在财务的场景下,经常会做一些加减操作。MySQL要求unsigned数值相减之...
- MySQL数据库入门(四)数据类型简介
-
在MySQL中数据类型有以下五种:数字整数:常用的有2种,一是int型,int型最多可以表示10位数字(无符号的4开头,有符号的2开头;二是tinyintunsigned,用来表示年龄(值范围是0-...
- mysql常用语句超级详细汇总(mysql常用语法)
-
1.连接数据库:连接本地数据库:mysql-uroot-p连接远程数据库:mysql-h192.169.22.199-uroot-p退出数据库:exit...
- MYSQL——CAST()函数的用法(mysql中case)
-
语法为:Cast(字段名as转换的类型),其中类型可以为:CHAR[(N)]字符型DATE日期型DATETIME日期和时间型...
- MySQL存储引擎背后的真相:为何InnoDB并非所有场景的最佳选择
-
MySQL存储引擎背后的真相:为何InnoDB并非所有场景的最佳选择引言部分你是否遇到过这样的情况:明明已经按照最佳实践选择了MySQL的InnoDB引擎,却发现某些查询依然缓慢得令人沮丧?或者当你的...
- MySQL 表分区?涨知识了(mysql数据表分区)
-
1.什么是表分区...
- 《MySQL必知必会》_笔记08(mysql必知必会mobi)
-
第19章插入数据一、数据插入概述INSERT语句用于向数据库表中插入(添加)数据,是SQL中常用的数据操作语句之一。它可以用多种方式使用,包括插入完整的行、插入行的一部分、插入多行以及插入某些查询的...
- 当 SQL Server(mssql-jdbc) 遇上 BigDecimal → 精度丢失,真坑!
-
开心一刻 中午和哥们一起喝茶 哥们说道:晚上喝酒去啊...
- MYSQL有哪些数据类型(mysql有哪些数据类型,有哪些运算符)
-
整理下以便查阅,还想吐槽下:这头条怎么就不能给文章分类呢?整数类型...
- 使用MySQL分区的注意事项(使用mysql分区的注意事项有哪些)
-
MySQL分区是将一个表分解成多个区块进行操作和保存,从而降低每次操作的数据量,提高性能。从逻辑上看,只有一个表,但物理上这个表可能由多个物理分区组成,每个分区都是一个独立的对象,可以进行独立处理。...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
推荐7个模板代码和其他游戏源码下载的网址
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)