Skip to content

feat: 新增日志分组,支持按业务分组输出日志到不同目录 - #1062

Open
yoranye wants to merge 2 commits into
qos-ch:branch_1.2.xfrom
yoranye:branch_1.2.x
Open

feat: 新增日志分组,支持按业务分组输出日志到不同目录#1062
yoranye wants to merge 2 commits into
qos-ch:branch_1.2.xfrom
yoranye:branch_1.2.x

Conversation

@yoranye

@yoranye yoranye commented Aug 6, 2026

Copy link
Copy Markdown

功能说明

新增按业务分组(Group)将日志输出到不同目录的功能,实现类似
LoggerFactory.getLogger(Class, String group) 的效果。

新增文件

文件 说明
GroupContext.java 基于 ThreadLocal 的分组上下文管理
GroupRoutingFilter.java 自定义 TurboFilter,拦截日志并注入 MDC

工作原理

  1. 业务代码调用 GroupLoggerFactory.getLogger(Class, "order")
  2. GroupContext 将 "order" 存入 ThreadLocal
  3. GroupRoutingFilter(TurboFilter)在日志事件创建前拦截, 将 ThreadLocal 中的 group 注入 MDC(key=LOG_GROUP)
  4. SiftingAppender 根据 MDC 中的 LOG_GROUP 值, 动态路由到 logs/{group}/app.log

配置示例

在 logback.xml 中配置 SiftingAppender + TurboFilter 即可生效, 无需修改业务代码的日志打印方式。

验证

本地编译通过,单元测试通过,日志文件按 group 正确生成到不同目录。

Signed-off-by: yoran.ye[yoran.ye@qq.com]

yoranye added 2 commits August 6, 2026 14:38
新增按业务分组(Group)将日志输出到不同目录的功能,实现类似
`LoggerFactory.getLogger(Class, String group)` 的效果。

| 文件 | 说明 |
|------|------|
| `GroupContext.java` | 基于 ThreadLocal 的分组上下文管理 |
| `GroupRoutingFilter.java` | 自定义 TurboFilter,拦截日志并注入 MDC |
| `GroupLoggerFactory.java` | 对外工具类,封装 group 设置和 Logger 获取 |

1. 业务代码调用 `GroupLoggerFactory.getLogger(Class, "order")`
2. GroupContext 将 "order" 存入 ThreadLocal
3. GroupRoutingFilter(TurboFilter)在日志事件创建前拦截,
   将 ThreadLocal 中的 group 注入 MDC(key=LOG_GROUP)
4. SiftingAppender 根据 MDC 中的 LOG_GROUP 值,
   动态路由到 `logs/{group}/app.log`

在 logback.xml 中配置 SiftingAppender + TurboFilter 即可生效,
无需修改业务代码的日志打印方式。

本地编译通过,单元测试通过,日志文件按 group 正确生成到不同目录。

Signed-off-by: Yoran Ye <yoran.ye@qq.com>
新增按业务分组(Group)将日志输出到不同目录的功能,实现类似
`LoggerFactory.getLogger(Class, String group)` 的效果。

| 文件 | 说明 |
|------|------|
| `GroupContext.java` | 基于 ThreadLocal 的分组上下文管理 |
| `GroupRoutingFilter.java` | 自定义 TurboFilter,拦截日志并注入 MDC | | `GroupLoggerFactory.java` | 对外工具类,封装 group 设置和 Logger 获取 |

1. 业务代码调用 `GroupLoggerFactory.getLogger(Class, "order")`
2. GroupContext 将 "order" 存入 ThreadLocal
3. GroupRoutingFilter(TurboFilter)在日志事件创建前拦截, 将 ThreadLocal 中的 group 注入 MDC(key=LOG_GROUP)
4. SiftingAppender 根据 MDC 中的 LOG_GROUP 值, 动态路由到 `logs/{group}/app.log`

在 logback.xml 中配置 SiftingAppender + TurboFilter 即可生效, 无需修改业务代码的日志打印方式。

本地编译通过,单元测试通过,日志文件按 group 正确生成到不同目录。

Signed-off-by: Yoran Ye <yoran.ye@qq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant