# TraceLog
**Repository Path**: lau5757521/trace-log
## Basic Information
- **Project Name**: TraceLog
- **Description**: TraceLog是一个简单易用的Java日志记录组件,专为Spring Boot应用设计,可以轻松集成到您的项目中,并提供丰富的日志记录功能。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-05-23
- **Last Updated**: 2025-06-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# TraceLog
TraceLog是一个简单易用的Java日志记录组件,专为Spring Boot应用设计,可以轻松集成到您的项目中,并提供丰富的日志记录功能。
## 特性
- 基于AOP的自动日志记录
- 支持记录完整的请求和响应信息
- 支持敏感信息脱敏处理
- 支持多种日志级别控制
- 支持异步日志记录提高性能
- 支持控制台和文件双重输出
- 支持大对象智能检测
- 支持异常堆栈记录
- 支持自定义日志存储方式
- 支持Ant风格的路径排除模式
- 支持类和方法级别的注解配置
- 支持分布式链路追踪(TraceID)
- 支持MDC上下文变量
- 无需修改现有代码,即插即用
## 快速开始
### 1. 添加依赖
```xml
com.tracelog
tracelog-core
1.0.0
```
### 2. 配置TraceLog
在`application.yml`中添加TraceLog配置:
```yaml
trace-log:
enabled: true
cache-request-body: true
enable-trace-id: true
async: true
print-to-console: true
file-output: true
log-file-path: logs/tracelog.log
mask-sensitive-info: true
sensitive-fields:
- password
- email
exclude-patterns:
- /actuator/**
```
### 3. 配置日志格式(可选)
在`application.yml`中配置日志格式以显示TraceID:
```yaml
logging:
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n"
file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n"
```
### 4. 使用@TraceLog注解
在控制器或服务类上添加`@TraceLog`注解:
```java
@RestController
@RequestMapping("/api/users")
@TraceLog(module = "用户管理")
public class UserController {
@GetMapping
@TraceLog("获取所有用户")
public List getAllUsers() {
return userService.getAllUsers();
}
@PostMapping
@TraceLog(value = "创建新用户", level = LogLevel.INFO,
sensitiveFields = {"password", "email"})
public User createUser(@RequestBody User user) {
return userService.createUser(user);
}
}
```
## 配置选项
| 配置项 | 描述 | 默认值 |
| ---- | ---- | ---- |
| enabled | 是否启用 | true |
| cache-request-body | 是否缓存请求体 | true |
| enable-trace-id | 是否启用跟踪ID | true |
| async | 是否异步记录日志 | true |
| print-to-console | 是否启用控制台输出 | true |
| file-output | 是否启用文件输出 | false |
| log-file-path | 日志文件路径 | logs/tracelog.log |
| mask-sensitive-info | 是否脱敏敏感信息 | true |
| record-exception-stack-trace | 是否记录异常堆栈 | true |
| exception-stack-trace-lines | 异常堆栈记录行数 | 10 |
| sensitive-fields | 敏感字段列表 | ["password", "pwd", ...] |
| exclude-patterns | 排除的路径模式 | [] |
| large-object-threshold | 大对象检测阈值(字节) | 10240 |
## 注解选项
`@TraceLog`注解支持以下选项:
| 选项 | 描述 | 默认值 |
| ---- | ---- | ---- |
| value | 日志描述 | "" |
| module | 所属模块 | "" |
| level | 日志级别 | LogLevel.INFO |
| includes | 包含信息 | [] |
| excludes | 排除信息 | [] |
| ignore | 是否忽略日志记录 | false |
| recordResponse | 是否记录响应内容 | true |
| sensitiveFields | 脱敏字段 | [] |
## 默认包含的信息
TraceLog默认会记录以下信息:
- **基本信息**:时间戳、日志级别、模块、描述
- **请求信息**:URI、方法、请求体、客户端IP
- **执行信息**:执行时间、异常信息
- **响应信息**:响应体、状态码
- **追踪信息**:TraceID、用户ID(如果有)
## 自定义实现
TraceLog提供了多个接口,您可以自定义实现:
- `LogHandler`:日志处理器,负责创建和处理日志记录
- `LogRecordDao`:日志存储接口,负责持久化日志记录
### 自定义存储
```java
@Component
public class DatabaseLogRecordDao implements LogRecordDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void save(LogRecord logRecord) {
// 将日志保存到数据库
String sql = "INSERT INTO operation_log(trace_id, module, description, method, uri, execution_time) " +
"VALUES(?, ?, ?, ?, ?, ?)";
jdbcTemplate.update(sql,
MDC.get("traceId"),
logRecord.getModule(),
logRecord.getDescription(),
logRecord.getMethod(),
logRecord.getUri(),
logRecord.getExecutionTime().toMillis()
);
}
}
```
### 自定义处理器
```java
@Component
public class CustomLogHandler implements LogHandler {
// 实现自定义的日志处理逻辑
// ...
}
```
## 高级功能
### 敏感信息脱敏
TraceLog会自动对以下字段进行脱敏:
- 密码字段:password、pwd
- 认证相关:token、authorization、secret
- 个人信息:email、mobile、phone
您可以通过配置文件或注解添加更多敏感字段。
### 异常堆栈记录
TraceLog可以记录异常的堆栈信息,默认记录前10行,可以通过配置调整:
```yaml
trace-log:
record-exception-stack-trace: true
exception-stack-trace-lines: 20
```
### 大对象处理
对于超过阈值的大型响应对象,TraceLog会自动记录其大小而不是完整内容,避免占用过多存储空间:
```yaml
trace-log:
large-object-threshold: 20480 # 20KB
```
### 分布式链路追踪
TraceLog为每个请求生成唯一的跟踪ID,并通过MDC记录到日志中:
- 支持从请求头中获取 `X-Trace-Id`,便于跨服务追踪
- 自动将跟踪ID添加到响应头中,便于客户端排查问题
- 可以通过MDC在日志中显示跟踪ID:`%X{traceId}`
### 条件激活示例
在启用特定配置时才使用某种日志存储实现:
```java
@Bean
@Primary
@Profile("db-storage")
public LogRecordDao databaseLogRecordDao() {
return new DatabaseLogRecordDao();
}
```
## 示例项目
查看`tracelog-example`模块,了解如何在实际项目中使用TraceLog。示例项目提供了完整的用户管理API实现,展示了TraceLog的各种使用场景。
## 兼容性
- 支持Spring Boot 2.x和3.x版本
- 支持Java 8及以上版本
- 无第三方存储依赖
## 许可证
TraceLog使用MIT许可证。