前言
当今微服务化盛行的前提下,不同的服务或组件可能采用不同的日志格式和记录方式,这增加了日志解析和处理的难度。在排错时,需要熟悉各种日志格式和记录规则,以便从日志中提取出有用的信息。并且分布式系统中的服务之间通过RPC等方式进行调用,形成了一个复杂的调用链。当一个请求出现问题时,需要追踪整个调用链,确定问题的来源,导致定位某个请求的日志以及上下游业务的日志会变得有些困难。这时候相信大家都可能会想到使用Skyworking或者Zipking之类的分布式追踪系统来解决问题,但在使用这些框架时都需要考虑日志的存储问题!日志的量是巨大的,这就不得不增加成本去维护这些东西。所以,如果你不想使用这些框架,那么你可以考虑下使用这个开源轻量的分布式日志日志标记追踪神器!
特性
- 通过对日志打标签完成轻量级微服务日志追踪
- 提供三种接入方式:javaagent完全无侵入接入,字节码一行代码接入,基于配置文件的接入
- 对业务代码无侵入式设计,使用简单,10分钟即可接入
- 支持常见的log4j,log4j2,logback三大日志框架,并提供自动检测,完成适配
- 支持dubbo,dubbox,springcloud三大RPC框架
- 支持Spring Cloud Gateway和Soul网关
- 适配HttpClient和Okhttp的http调用标签传递
- 支持三种任务框架,JDK的TimerTask,Quartz,XXL-JOB
- 支持日志标签的自定义模板的配置,提供多个系统级埋点标签的选择
- 支持异步线程的追踪,包括线程池,多级异步线程等场景
- 几乎无性能损耗,快速稳定,经过压测,损耗在0.01%
举例说明
简单例子
@TLogAspect({"id"})
public void demo1(String id,String name){
log.info("这是第一条日志");
log.info("这是第二条日志");
log.info("这是第三条日志");
new Thread(() -> log.info("这是异步日志")).start();
}
2020-02-08 20:22:33.945 [main] INFO Demo - <0.2><7205781616706048>[NO1234] 这是第一条日志
2020-02-08 20:22:33.945 [main] INFO Demo - <0.2><7205781616706048>[NO1234] 这是第二条日志
2020-02-08 20:22:33.945 [main] INFO Demo - <0.2><7205781616706048>[NO1234] 这是第三条日志
2020-02-08 20:22:33.948 [Thread-3] INFO Demo - <0.2><7205781616706048>[NO1234] 这是异步日志
多个数值
@TLogAspect({"id","name"})
public void demo1(String id,String name){
log.info("这是第一条日志");
og.info("这是第二条日志");log.info("这是第三条日志");
new Thread(() -> log.info("这是异步日志")).start();
}
2020-02-08 22:09:40.101 [main] INFO Demo - <0.2><7205781616706048>[NO1234-jenny] 这是第一条日志
2020-02-08 22:09:40.101 [main] INFO Demo - <0.2><7205781616706048>[NO1234-jenny] 这是第二条日志
2020-02-08 22:09:40.102 [main] INFO Demo - <0.2><7205781616706048>[NO1234-jenny] 这是第三条日志
2020-02-08 22:09:40.103 [Thread-3] INFO Demo - <0.2><7205781616706048>[NO1234-jenny] 这是异步日志
点操作符
@TLogAspect({"person.id","person.age","person.company.department.dptId"})
public void demo(Person person){
log.info("多参数加多层级示例");
}
2020-02-08 22:09:40.110 [main] INFO Demo - <0.2><7205781616706048>[31-25-80013] 多参数加多层级示例
线程池
ExecutorService pool = Executors.newFixedThreadPool(5);
pool.submit(new TLogInheritableTask() {
@Override
public void runTask() {
log.info("我是异步线程日志");
}});对于使用了线程池的场景,由于线程池中的线程不会被销毁,会被复用。需要你用TLogInheritableTask替换Runnable,否则标签数据会重复:
http支持
String url = "http://127.0.0.1:2111/hi?name=2323";
CloseableHttpClient client = HttpClientBuilder.create()
.addInterceptorFirst(new TLogHttpClientInterceptor())
.build();
HttpGet get = new HttpGet(url);
try {
CloseableHttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
log.info("http response code:{}", response.getStatusLine().getStatusCode());
log.info("http response result:{}",entity == null ? "" : EntityUtils.toString(entity));
} catch (IOException e) {
e.printStackTrace();
}
这个开源轻量的分布式日志追踪系统就是——TLog!
TLog提供了一种最简单的方式来解决日志追踪问题,它不收集日志,也不需要另外的存储空间,它只是自动的对你的日志进行打标签,自动生成TraceId贯穿你微服务的一整条链路。并且提供上下游节点信息。适合中小型企业以及想快速解决日志追踪问题的公司项目使用。大家可以去官网看一下,确实非常适合分布式系统中关于日志调用链路的追踪问题。如果你不考虑使用Skyworking或者Zipking,亦或者是收费的Datadog或者阿里ARMS时,可以考虑使用这个框架。
开源地址:https://gitee.com/dromara/TLog
官网:https://tlog.yomahub.com/
往期推荐
2.4K Star!分享一个很不错的k8s管理面板!很轻量!
36.9K star ! 推荐一个酷炫低代码开发平台!功能太强!
16.6K Star!新一代Linux 服务器运维管理!有点强!
本文暂时没有评论,来添加一个吧(●'◡'●)