Trace-Recorder history

2.4 version

2.3 version补充: 废弃Recorders,由于该类只是为了兼容1.0的方便使用,请使用更灵活的方式TraceRecorder + TraceRecorderConfig

一、简介 2.4

Trace-Recorder 是笔者开源的一个简单的、可伸缩的、高性能的记录框架。

主要解决:看源码时记录不方便,没有一个清晰的流程能更直观了解到源码的步骤,重复看一个框架都觉得是一个新的。那么我想你可能需要它。

  • 使用简单,一行代码可搞定简单记录
  • 伸缩性强,可自定义扩展
  • 配置灵活,xml和properties两向曲
  • 性能高速,在并发的场景下记录处理更快速

二、使用 2.4

项目依赖

gradle

1
implementation 'cn.xusc:trace-recorder:2.4'

maven

1
2
3
4
5
<dependency>
<groupId>cn.xusc</groupId>
<artifactId>trace-recorder</artifactId>
<version>2.4</version>
</dependency>

跟踪记录仪属性-更灵活的配置

可以根据xml文件和properties文件进行灵活配置,并加载生成TraceRecorderConfig

目录结构

目录结构

PrefixInfoEnhancer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package cn.xusc.enhance;

import cn.xusc.trace.EnhanceInfo;
import cn.xusc.trace.enhance.InfoEnhancer;

/**
* 前缀信息增强器
*
* @author wangcai
*/
public class PrefixInfoEnhancer implements InfoEnhancer {

@Override
public EnhanceInfo enhance(EnhanceInfo eInfo) {
eInfo.setInfo("prefix:" + eInfo.getInfo());
return eInfo;
}

@Override
public EnhanceInfo setWriteInfo(EnhanceInfo eInfo) {
eInfo.setWriteInfo(eInfo.getInfo());
return eInfo;
}
}

TraceRecorderProperties.properties

1
2
3
4
5
6
# more see cn.xusc.trace.util.TraceRecorderProperties
cn.xusc.trace.config.TraceRecorderConfig.enableStack=true
cn.xusc.trace.config.TraceRecorderConfig.enableThreadName=true
cn.xusc.trace.config.TraceRecorderConfig.enableAsync=false
cn.xusc.trace.config.TraceRecorderConfig.infoEnhancers=cn.xusc.enhance.PrefixInfoEnhancer

TraceRecorderProperties.xml

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>more see cn.xusc.trace.util.TraceRecorderProperties</comment>
<entry key="cn.xusc.trace.config.TraceRecorderConfig.enableStack">true</entry>
<entry key="cn.xusc.trace.config.TraceRecorderConfig.enableThreadName">true</entry>
<entry key="cn.xusc.trace.config.TraceRecorderConfig.enableAsync">false</entry>
<entry key="cn.xusc.trace.config.TraceRecorderConfig.infoEnhancers">
cn.xusc.enhance.PrefixInfoEnhancer
</entry>
</properties>

Bootstrap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package cn.xusc;

import cn.xusc.trace.TraceRecorder;
import cn.xusc.trace.config.TraceRecorderConfig;
import cn.xusc.trace.util.TraceRecorderProperties;

import java.io.IOException;

public class Bootstrap {

public static void main(String[] args) throws IOException {
// 构建跟踪记录仪属性
TraceRecorderProperties properties = new TraceRecorderProperties();
// 加载TraceRecorderProperties.properties配置
properties.load(ClassLoader.getSystemClassLoader().getResource("TraceRecorderProperties.properties"));
// 加载TraceRecorderProperties.xml配置
// properties.loadFromXML(ClassLoader.getSystemClassLoader().getResource("TraceRecorderProperties.xml"));
// 获取TraceRecorderConfig配置
TraceRecorderConfig config = properties.config();
// 构建配置相关性的跟踪记录仪
TraceRecorder recorder = new TraceRecorder(config);
// 记录消息
recorder.log("hello {}", "TraceRecorderProperties");
}
}
1
2
> Task :webflux:Bootstrap.main()
main cn.xusc.Bootstrap.main()[22] - prefix:hello TraceRecorderProperties

三、项目地址 2.4

github: https://github.com/Cw404/Trace-Recorder

2.2 version

一、简介 2.2

Trace-Recorder 是笔者开源的一个简单的、可伸缩的、高性能的记录框架。

主要解决:看源码时记录不方便,没有一个清晰的流程能更直观了解到源码的步骤,重复看一个框架都觉得是一个新的。那么我想你可能需要它。

  • 使用简单,一行代码可搞定简单记录
  • 伸缩性强,可自定义扩展
  • 性能高速,在并发的场景下记录处理更快速

二、使用 2.2

项目依赖

gradle

1
implementation 'cn.xusc:trace-recorder:2.2'

maven

1
2
3
4
5
<dependency>
<groupId>cn.xusc</groupId>
<artifactId>trace-recorder</artifactId>
<version>2.2</version>
</dependency>

关闭跟踪记录仪

关闭跟踪记录仪,只是释放了异步的资源,并未对其进行标记bug - fixup to V2.2.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import cn.xusc.trace.TraceRecorder;
import cn.xusc.trace.config.TraceRecorderConfig;

import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;

public class Bootstrap {

public static void main(String[] args) throws InterruptedException {
//构建异步跟踪记录仪
TraceRecorder recorder = new TraceRecorder(TraceRecorderConfig.builder().enableAsync(true).taskHandlerSize(1).build());
// 构建 provider 进行消息提供
new Thread(() -> {
IntStream.rangeClosed(1,10).forEach(i -> recorder.log("shutdown - {}" ,i));
},"provider").start();
// 为 provider 提供启动预热
TimeUnit.MILLISECONDS.sleep(6);
// 关闭记录仪
recorder.shutdown();
}
}
1
2
3
4
5
> Task :webflux:Bootstrap.main()
shutdown - 1

shutdown - 2

复位

重置特殊的结构,回到原始的组件模样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import cn.xusc.trace.TraceRecorder;
import cn.xusc.trace.constant.RecordLabel;
import cn.xusc.trace.filter.InfoFilter;

public class Bootstrap {

public static void main(String[] args) {
TraceRecorder recorder = new TraceRecorder();
recorder.log("success");
// 增加信息过滤器 -> 因为总是返回false,所以总是失败
recorder.addInfoFilter(new InfoFilter() {
@Override
public boolean isRecord(String info, RecordLabel label) {
return false;
}
});
recorder.log("failure");
// 重置特殊的结构(复位) -> 将添加的特殊组件丢弃,回到原始的组件结构
recorder.resetSpecial();
recorder.log("success");
}
}
1
2
3
> Task :webflux:Bootstrap.main()
main cn.xusc.Bootstrap.main()[11] - success
main cn.xusc.Bootstrap.main()[22] - success

三、项目地址 2.2

github: https://github.com/Cw404/Trace-Recorder

2.0 version

一、简介 2.0

Trace-Recorder 是笔者开源的一个简单的、可伸缩的、高性能的记录框架。

主要解决:看源码时记录不方便,没有一个清晰的流程能更直观了解到源码的步骤,重复看一个框架都觉得是一个新的。那么我想你可能需要它。

  • 使用简单,一行代码可搞定简单记录
  • 伸缩性强,可自定义扩展
  • 性能高速,在并发的场景下记录处理更快速

二、使用 2.0

项目依赖

gradle

1
implementation 'cn.xusc:trace-recorder:2.0'

maven

1
2
3
4
5
<dependency>
<groupId>cn.xusc</groupId>
<artifactId>trace-recorder</artifactId>
<version>2.0</version>
</dependency>

简单异步记录

简单的异步输出

1
2
3
4
5
6
7
8
9
10
import cn.xusc.trace.util.Recorders;

public class Bootstrap {
public static void main(String[] args) {
System.out.println("Hello world!");
// Trace-Recorder 使用
Recorders.enableAsync();
Recorders.log("hello {}", "world!");
}
}
1
2
3
> Task :webflux:Bootstrap.main()
Hello world!
TaskHandler-1 cn.xusc.Bootstrap.main()[10] - hello world!

配置化的记录

配置化的输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import cn.xusc.trace.config.TraceRecorderConfig;
import cn.xusc.trace.util.Recorders;

import java.util.stream.IntStream;

public class Bootstrap {
public static void main(String[] args) {
System.out.println("Hello world!");
// Trace-Recorder 使用
Recorders.config(
TraceRecorderConfig.builder()
.enableStack(true) // 启用栈信息
.enableThreadName(true) // 启用线程名信息
.enableAsync(true) // 启用异步
.taskHandlerSize(2) // 设置异步任务处理器数量
.build()
);
/*
构建三个记录
*/
IntStream.rangeClosed(1, 3).forEach(i -> Recorders.log("hello {}", "world!"));
}
}
1
2
3
4
5
> Task :webflux:Bootstrap.main()
Hello world!
TaskHandler-2 cn.xusc.Bootstrap.lambda$main$0()[20] - hello world!
TaskHandler-1 cn.xusc.Bootstrap.lambda$main$0()[20] - hello world!
TaskHandler-2 cn.xusc.Bootstrap.lambda$main$0()[20] - hello world!

三、项目地址 2.0

github: https://github.com/Cw404/Trace-Recorder

1.2 version

一、简介 1.2

在1.0版本上增加了信息格式化的功能

二、使用 1.2

项目依赖

gradle

1
implementation 'cn.xusc:trace-recorder:1.2'

maven

1
2
3
4
5
<dependency>
<groupId>cn.xusc</groupId>
<artifactId>trace-recorder</artifactId>
<version>1.2</version>
</dependency>

信息格式化记录

信息格式化的输出

1
2
3
4
5
6
7
8
9
import cn.xusc.trace.util.Recorders;

public class Bootstrap {
public static void main(String[] args) {
System.out.println("Hello world!");
// Trace-Recorder 使用
Recorders.log("hello {}", "world!");
}
}
1
2
3
> Task :webflux:Bootstrap.main()
Hello world!
cn.xusc.Bootstrap.main()[9] - hello world!

三、项目地址 1.2

github: https://github.com/Cw404/Trace-Recorder

1.0 version

一、简介 1.0

Trace-Recorder 是笔者开源的一个简单的、可伸缩的记录框架。

主要解决:看源码时记录不方便,没有一个清晰的流程能更直观了解到源码的步骤,重复看一个框架都觉得是一个新的。那么我想你可能需要它。

  • 使用简单,一行代码可搞定简单记录
  • 伸缩性强,可自定义扩展

二、使用 1.0

项目依赖

gradle

1
implementation 'cn.xusc:trace-recorder:1.0'

maven

1
2
3
4
5
<dependency>
<groupId>cn.xusc</groupId>
<artifactId>trace-recorder</artifactId>
<version>1.0</version>
</dependency>

简单记录

更详细的输出

1
2
3
4
5
6
7
8
9
import cn.xusc.trace.util.Recorders;

public class Bootstrap {
public static void main(String[] args) {
System.out.println("Hello world!");
// Trace-Recorder 使用
Recorders.log("Hello Trace-Recorder");
}
}
1
2
3
> Task :webflux:Bootstrap.main()
Hello world!
cn.xusc.Bootstrap.main()[8] - Hello Trace-Recorder

伸缩性的记录

更丰富的输出

1
2
3
4
5
6
7
8
9
10
11
import cn.xusc.trace.util.Recorders;

public class Bootstrap {
public static void main(String[] args) {
System.out.println("Hello world!");
// 添加一个通用统计信息增强器
Recorders.addCommonStatisticsInfoEnhancer();
// Trace-Recorder 使用
Recorders.log("The statistics are as follows:");
}
}
1
2
3
4
5
6
> Task :webflux:Bootstrap.main()
Hello world!
cn.xusc.Bootstrap.main()[11] - The statistics are as follows:
--------------------
cn.xusc.Bootstrap - 1
--------------------

自定义的记录

自定义的输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import cn.xusc.trace.EnhanceInfo;
import cn.xusc.trace.enhance.InfoEnhancer;
import cn.xusc.trace.util.Recorders;

public class Bootstrap {
public static void main(String[] args) {
System.out.println("Hello world!");
// 添加一个自定义信息增强器
Recorders.addInfoEnhancer(new InfoEnhancer() {
@Override
public EnhanceInfo enhance(EnhanceInfo eInfo) {
// 做一些事
eInfo.setInfo(eInfo.getInfo().trim() + "_enhance");
return eInfo;
}

@Override
public EnhanceInfo setWriteInfo(EnhanceInfo eInfo) {
// 设置增强后的消息输出
eInfo.setWriteInfo(eInfo.getInfo());
return eInfo;
}
});
// Trace-Recorder 使用
Recorders.log("hello,custom InfoEnhance");
}
}
1
2
3
> Task :webflux:Bootstrap.main()
Hello world!
hello,custom InfoEnhance_enhance

三、项目地址 1.0

github: https://github.com/Cw404/Trace-Recorder
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信