# one-logger
**Repository Path**: pxyc/one-logger
## Basic Information
- **Project Name**: one-logger
- **Description**: 审计日志框架,对业务零入侵,无感知打印主流中间件执行日志
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-01-28
- **Last Updated**: 2024-02-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## one-logger
仅需一个日志框架,打印全流程审计日志
### 一、目标
在零配置的情况下,无感知的支持主流各个中间件打印,支持链路,后续将支持对接第三方监控平台。
强耦合Springboot环境,是使用aop对中间件底层方法进行代理,打印日志。
### 二、Features
1. 异步打印,不影响主流程耗时 AsyncAuditPool 开启线程池,对外方法,统一打印
2. 日志分层 统一logger-name,logback.xml 设置不同的日志打印方式
3. 支持controller http请求 httpserlvet和切面结合
4. 支持resttemplate中间件日志打印
5. 支持rabbitmq中间件日志打印
6. 支持kafka中间件日志打印
7. 支持mysql日志打印 【支持mybatis框架或支持druid数据源方式】
8. 支持Redis日志打印 redisTemplate自定义切面
9. 支持spi扩展,支持日志字段脱敏、过滤,格式自定义
---
### 三、日志格式
默认支持两种格式 ```json``` 和 ```plain``` ,也支持自定义格式,通过spi实现
字段
| 字段 | 含义 | 示例 |
|-----------------|---------------------------------|--------------------------------------------------------------------|
| timestamp | 打印时的时间戳 yyyy-MM-dd HH:mm:ss.SSS | 2024-01-23 18:45:56.035 |
| traceId | 请求id, uuid | d2c0ec12c8fb489299b1e587e36ce683 |
| applicationName | 应用名称 | demo-service |
| logType | 日志类型,区分什么类型 | WEB/DB/RABBITMQ.SEND |
| action | 该日志的具体行为 | WEB./demo/findList |
| rootSpan | 该日志的根spanId,用于链路追踪 | WEB./demo/findList |
| interface | 该日志的具体执行入口,用户代码分析 | com.demo.controller.ActivityBriefController |
| method | 该日志的具体执行方法,用户代码分析 | findList |
| connId | 链接地址 | 0:0:0:0:0:0:0:1 |
| sourceIp | 源ip地址 | 127.0.0.1 |
| spanId | 调用链,spanId | 0.1.1.2 |
| sequence | 被调用次数 | 10 |
| cost | 耗时(ms) | 10 |
| request | 请求参数,json格式 | "request":{"qp":{"pageNum":1,"pageSize":10,"id":"11","name":"123"} |
| response | 响应参数,json格式 | "response":{"retrun_code":0,"data":[]} |
| extraInfo | 额外参数,http header、mysql地址等 | "extraInfo":"clientIp=0:0:0:0:0:0:0:1;clientPort=60833;header={};" |
- plain
字符切分为 三个空格 + ,
```text
2024-01-25 10:29:57.049, 6722df6f783b4c58914cedbbc0f4d3cc, dem-service, WEB, WEB./demo/findList, WEB./demo/findList, com.demo.controller.DemoController, findList, 0:0:0:0:0:0:0:1, 127.0.0.1, 0.1, 1, 50516, requestBody:{"pageNum":0,"pageSize":0,"id":0,"name":"123"}, retrun_code:0^_^data:[], clientIp=0:0:0:0:0:0:0:1;clientPort=65179;header={};
```
- json
```json
{
"timestamp":"2024-01-23 18:45:56.035",
"requestId":"d2c0ec12c8fb489299b1e587e36ce683",
"applicationName":"demo-service",
"logType":"WEB",
"action":"WEB./demo/findList",
"rootSpan":"WEB./demo/findList",
"interface":"com.demo.controller.DemoController",
"method":"findList",
"connId":"0:0:0:0:0:0:0:1",
"sourceIp":"127.0.0.1",
"spanId":"0.1",
"sequence":1,
"cost":107,
"request":{
"requestBody":{
"pageNum":1,
"pageSize":10,
"id":"11",
"name":"123"
}
},
"response":{
"retrun_code":0,
"data":[
{
}
]
},
"extraInfo":"clientIp=0:0:0:0:0:0:0:1;clientPort=60833;header={};"
}
```
### 四、How To Use it
4.1 引入依赖
```xml
构造输出日志的String格式,框架默认提供:plain和json两种格式,默认为:json输出
- LoggerFilter.class类似javaEE的filter,支持在打印日志前后对参数进行处理;框架默认提供: loginIndex和ignoreParams,分别能力为:配置自定义logIndex;忽略输出的字符;
### 七、性能测试 [性能测试](/doc/benchmark.md)