Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >日志管理详解

日志管理详解

原创
作者头像
花落花相惜
发布于 2021-12-16 14:30:50
发布于 2021-12-16 14:30:50
7960
举报

支持的日志框架

每个公司所用的日志框架形形色色。TLog宣称支持了主流的三大日志框架:log4j,log4j2,logback

实际测试中,在这3个框架中,TLog也都能够正常打印出标签。只是在接入过程中,官方给出的接入方式有3种

5

测试下来,javaagent的方式对于有些项目的确不太稳定,有些复杂的项目会出现无效的情况。对于宣称最稳定的日志适配方式,测试了一下公司的项目,的确能顺利接入。

接入方式,按照文档一步步来就可以了。

支持的RPC框架

既然是跨微服务进行日志追踪,在实现方面也要对常用的RPC进行支持。TLog支持了Dubbo,SpringCloud,Dubbox三种常用的RPC,这点还是不错的。

实际测试中,在Spring cloud这块,TLog还支持了SpringCloud的Gateway。

在接入过程中,无论是哪种RPC框架,在springboot环境下TLog也能自动适配,引入一个就能自动装配。无需额外的配置。这点很方便。

但是在原生spring环境下(非springboot),还是需要xml的额外配置的,但是也相对简单,文档也有专门的说明。

业务标签

除了系统给予的标签外,我发现TLog另一大特点就是允许开发者自定义标签。接入也很简单,举个例子:

代码语言:txt
AI代码解释
复制
@TLogAspect({"str","user.name","user.userDetail.company","user.dddd"})
代码语言:txt
AI代码解释
复制
    public void test(String str, User user){
代码语言:txt
AI代码解释
复制
        log.info("这是自定义表达标签");
代码语言:txt
AI代码解释
复制
        log.info("这是业务日志1");
代码语言:txt
AI代码解释
复制
        log.info("这是业务日志2");
代码语言:txt
AI代码解释
复制
        log.info("这是业务日志3");
代码语言:txt
AI代码解释
复制
        log.info("这是业务日志4");
代码语言:txt
AI代码解释
复制
        log.info("这是业务日志5");
代码语言:txt
AI代码解释
复制
    }

只要在方法上加一个标签,那么这个方法下面所有的日志,包括之后的N个层级,都会自动加上你定义的标签

这个功能在对日志的排版和查找上,又能增加很多个标记。这个很赞!

7

甚至于自定义标签还支持对信息的逻辑处理,可以自定义类去处理这些信息

代码语言:txt
AI代码解释
复制
@TLogAspect(convert = CustomAspectLogConvert.class)
代码语言:txt
AI代码解释
复制
public void demo(Person person){
代码语言:txt
AI代码解释
复制
  log.info("自定义Convert示例");
代码语言:txt
AI代码解释
复制
}

这个具体效果,大家可以去试试。总之一个标签搞定所有的自定义标签。

其他场景的支持

参数 &耗时打印支持:

引入了TLog之后,发现TLog还附带了无论在哪种框架之下每个方法的参数打印和耗时,默认为关闭,需要的只需要配置下就可以了:

代码语言:txt
AI代码解释
复制
tlog.enableInvokeTimePrint=true

出来的效果如下:

6

异步线程 &线程池的支持

如果你的项目有异步线程,对于标签传递的连贯性,也是自动支持的,没有任何问题。

但是对于线程池场景,TLog并没有原生支持。但是提供了一个辅助类,需要少量的侵入代码。这点还有待改善。

MQ支持

同样的,TLog也考虑到了MQ场景标签的传递。这个也需要少量的侵入代码。如果你什么都不改,则在MQ场景下无法支持。

性能

对于性能,我对TLog进行了简单的测试,只在log4j2的环境下进行了测试,测试条件是同步打印出几w条日志,在原生环境下的耗时和加入TLog框架之后的耗时对比,每组分别测10次,取平均值

测试代码非常简单:

代码语言:txt
AI代码解释
复制
StopWatch stopWatch = new StopWatch();
代码语言:txt
AI代码解释
复制
stopWatch.start();
代码语言:txt
AI代码解释
复制
for (int i = 0; i < 100; i++) {
代码语言:txt
AI代码解释
复制
  log.info("test log {}", i+1);
代码语言:txt
AI代码解释
复制
}
代码语言:txt
AI代码解释
复制
stopWatch.stop();
代码语言:txt
AI代码解释
复制
log.info("耗时:{}",stopWatch.getTotalTimeSeconds());

不加TLog

| 打印5w条日志(秒) | 打印10w条日志(秒)

---|---|---

第1次 | 6.496249974 | 15.595447718

第2次 | 6.185712521 | 14.295489162

第3次 | 6.116123718 | 13.559289437

第4次 | 6.205771261 | 12.782565374

第5次 | 6.727208117 | 12.884360048

第6次 | 5.908489157 | 14.604699842

第7次 | 6.153151066 | 13.700609245

第8次 | 6.603960836 | 13.048889457

第9次 | 6.139718196 | 12.584335736

第10次 | 6.365920588 | 12.85222910

平均 | 6.29 | 13.60

加入TLog

| 打印5w条日志(秒) | 打印10w条日志(秒)

---|---|---

第1次 | 5.997981416 | 12.878389572

第2次 | 6.154590093 | 14.268328625

第3次 | 6.228010581 | 12.385200456

第4次 | 6.452949788 | 15.542794904

第5次 | 6.156225995 | 12.350440713

第6次 | 6.121611887 | 12.543883453

第7次 | 6.18131273 | 12.192140225

第8次 | 6.238254682 | 12.159684042

第9次 | 6.403632588 | 12.308115127

第10次 | 5.954781153 | 12.321667925

平均 | 6.19 | 12.89

测试结果有点出乎意料,加了TLog后10次平均下来反而比不加要快第一点。但是我推测应该是测试环境和样本数量太少的问题,并不是说加反而比不加要快。只能说,如果进行100次,1000次测试。2者应该是差不多的。

从这个性能测试也侧面反映了,TLog不会给系统带来额外的开销。这点也赞一下。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
轻量级日志追踪方案——TLog
TLog提供了一种最简单的方式来解决日志追踪问题,它不收集日志,也不需要另外的存储空间,它只是自动的对你的日志进行打标签,自动生成TraceId贯穿你微服务的一整条链路。并且提供上下游节点信息。适合中小型企业以及想快速解决日志追踪问题的公司项目使用。
黑洞代码
2021/03/19
4.7K0
一次性捋清楚吧,对乱糟糟的“日志”说再见
最近一个朋友老是和我抱怨:公司系统日志打得实在是太烂了,有用的信息很少,没用的一大堆。就连那有用的信息,在那么多节点日志之间进行追查,也是痛苦的一笔。
Java程序猿阿谷
2021/03/23
5390
项目中引进这玩意,排查日志又快又准!
随着微服务盛行,很多公司都把系统按照业务边界拆成了很多微服务,在排错查日志的时候,因为业务链路贯穿着很多微服务节点,导致定位某个请求的日志以及上下游业务的日志会变得有些困难。
三友的java日记
2022/12/20
8130
项目中引进这玩意,排查日志又快又准!
一个轻量级的分布式日志标记追踪神器,十分钟接入,非常好用!
1、TLog通过对日志打标签完成企业级微服务的日志追踪。它不收集日志,使用简单, 产生全局唯一的追踪码。除了追踪码以外,TLog还支持SpanId和上下游服务信息 标签的追加。
码猿技术专栏
2023/05/01
6380
一个轻量级的分布式日志标记追踪神器,十分钟接入,非常好用!
京东App秒级百G日志传输存储架构设计与实战
在日常工作中,我们通常需要存储一些日志,譬如用户请求的出入参、系统运行时打印的一些info、error之类的日志,从而对系统在运行时出现的问题有排查的依据。
天涯泪小武
2021/12/09
8720
京东App秒级百G日志传输存储架构设计与实战
【JAVA】Java 日志打印规范
规范的日志是养成良好编程习惯的开始,也是关键时刻解决严重BUG的救命稻草。程序员开发的过程中可以打印debug日志,在复杂业务中提供日志来排查问题,也可以在出现生产问题的时候快速问题,及时处理。无论如何了解和学习日志的规范是程序员必备的基本功。
阿东
2022/12/30
5.9K0
【JAVA】Java 日志打印规范
最牛逼的 Java 日志框架,性能无敌,横扫所有对手.....
Logback 算是JAVA 里一个老牌的日志框架,从06年开始第一个版本,迭代至今也十几年了。不过logback最近一个稳定版本还停留在 2017 年,好几年都没有更新;logback的兄弟 slf4j 最近一个稳定版也是2017年,有点凉凉的意思。
芋道源码
2021/10/14
6700
你应该知道的日志应用
日志级别分类较细,通常使用的是下面的四个级别,按优先级从高到低分别是ERROR、WARN、INFO、DEBUG
一个架构师
2022/06/20
4400
全网最全、最细致的Java日志框架以及门面技术。
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。 ☠️每日毒鸡汤:生活是世上最罕见的事情,大多数人只是存在,仅此而已。 👋大家好!我是你们的老朋友Java学术趴,今天继续给大家分享小趴Java日志框架。对于一个应用程序来说
Java学术趴
2021/09/10
4.3K0
还在用Logback?Log4j2的异步性能已经无敌了,还不快试试
Logback 算是JAVA 里一个老牌的日志框架,从06年开始第一个版本,迭代至今也十几年了。不过logback最近一个稳定版本还停留在 2017 年,好几年都没有更新;logback的兄弟 slf4j 最近一个稳定版也是2017年,有点凉凉的意思。
JAVA日知录
2021/04/23
1.2K0
最牛逼的 Java 日志框架,性能无敌,横扫所有对手.....
Logback 算是JAVA 里一个老牌的日志框架,从06年开始第一个版本,迭代至今也十几年了。不过logback最近一个稳定版本还停留在 2017 年,好几年都没有更新;logback的兄弟 slf4j 最近一个稳定版也是2017年,有点凉凉的意思。
好好学java
2021/10/09
1.1K0
日志框架,选择Logback Or Log4j2?
来源:https://juejin.im/post/6844903926777511943
好好学java
2020/09/24
8590
日志框架,选择Logback Or Log4j2?
这 9 个 Java 开源项目 yyds
在开源中国里,不知道大家有没有留意到一个Java开源组织——Dromara?这个组织是由 Apache ShenYu(前身是Soul网关)的作者创立,多位 Java 开源作者参与的一个Java开源组织。
用户1516716
2021/12/01
7180
这 9 个 Java 开源项目 yyds
Springboot 整合 log4j2 日志详解
在项目推进中,如果说第一件事是搭 Spring 框架的话,那么第二件事情就是在 Sring 基础上搭建日志框架,我想很多人都知道日志对于一个项目的重要性,尤其是线上 Web 项目,因为日志可能是我们了解应用如何执行的唯一方式。
JavaFish
2020/01/02
1.3K0
日志导致线程Block的这些坑,你不得不防
总第525篇 2022年 第042篇 研发人员在项目开发中不可避免地要使用日志,通过它来记录信息和排查问题。Apache Log4j2提供了灵活且强大的日志框架,虽然上手比较快,但稍有不慎也非常容易踩“坑”。 本文介绍了美团统一API网关服务Shepherd在实践中所踩过的关于日志导致线程Block的那些“坑”,以及我们如何从日志框架源码层面进行分析和解决问题的过程,并在最后给大家分享一些关于日志避“坑”的实践经验,希望能给大家带来一些帮助。 1. 前言 2. 背景 3. 踩过的坑 3.1 日志队列满导致
美团技术团队
2022/08/26
1.5K0
日志导致线程Block的这些坑,你不得不防
每日一博 - 关于日志记录的最佳实践
记录日志是任何应用程序中至关重要的一部分,它可以帮助开发人员了解应用程序的行为、调试问题以及监控系统的健康状态。
小小工匠
2024/05/26
4970
高性能的Java日志框架log4j2
Apache Log4j2 和 Logback 对比有很大的改进。除了内部设计的调整外,主要有以下几点的大升级:
神秘的寇先森
2021/04/13
1.3K0
高性能的Java日志框架log4j2
Spring Boot 2.x的默认日志管理与Logback配置详解
Spring Boot在所有内部日志中使用Commons Logging,但是对底层日志的实现是开放的。在Spring Boot生态中,为Java Util Logging 、Log4J2 和Logback 这些常见的日志框架都提供了自动化配置组件,每种Logger都可以通过配置在控制台或者文件中输出日志内容。默认情况下,当我们使用各种Starter的时候,会使用Logback来实现日志管理。
程序猿DD
2022/01/05
1.3K0
Spring Boot 2.x的默认日志管理与Logback配置详解
Spring Boot 2 集成log4j2日志框架
Log4j2是 Log4j 的进化版本,并提供了许多 Logback 可用的改进,同时解决了 Logback 体系结构中的一些固有问题。而且日志处理中我们会用到kafka作为日志管道。而kafka客户端依赖与Logback的兼容不是很完美,你可以选择排除依赖冲突或者使用Log4j2 。
码农小胖哥
2019/12/05
8300
谈谈日志的最佳实践
日志是我们程序员的一个老生常谈的话题,你可能每天都会听到这个词。想起我刚刚大学毕业的时候刚进入公司,正逢做一些部门业务交接,也就是其他部门的服务交给我们维护。记得没交接多久,当时业务上微信公众号相关功能就出现了不可用,当时负责这部分业务的同学,排查问题及其艰难,整个链路一个日志都没打,就在入口处error日志,连续上了好几次线,加了好几轮日志,才把问题给定位住了。当时其他部门也出现了另外一个例子,日志打得太多了,由于业务访问的量级,导致大量日志打出,从而让磁盘IO打满,最后让整个服务瘫痪。
用户5397975
2020/05/26
9460
推荐阅读
相关推荐
轻量级日志追踪方案——TLog
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档