如何解决MDC的JOOQ日志
例如,我使用logback MDC记录我的应用程序不同模块的日志,
// 1. define a logger
org.slf4j.Logger mdclog = org.slf4j.LoggerFactory.getLogger("MY_LOGGER_NAME");
// record trade log
org.slf4j.MDC.put("MY_MDC_KEY","trade_log");
mdclog.info("This is trade log");
// record goods log
org.slf4j.MDC.put("MY_MDC_KEY","goods_log");
mdclog.info("This is goods log");
logback.xml中的mdc配置
<appender name="log_classify" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<Key>login</Key>
<DefaultValue>OTHER</DefaultValue>
</discriminator>
<sift>
<appender name="${MY_MDC_KEY}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<prudent>false</prudent>
<file>${LOG_PATH}/${MY_MDC_KEY}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${MY_MDC_KEY}_%d{yyyy-MM-dd}.log.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
</sift>
</appender>
这会生成两个日志文件,
我想在不同的日志文件中记录贸易或货物sql日志, 所以我想知道JOOQ是否支持这一点?
解决方法
jOOQ并未将其与开箱即用的记录器深度集成,但是您可以在运行SQL查询之前将org.slf4j.MDC.put
调用放入ExecuteListener
中,例如在{{3} }事件,一旦生成了SQL语句,并通过正则表达式匹配查询来做出决定。另外,您可以使用ExecuteListener::renderEnd
早点做出决定,尝试匹配查询中可能存在的特定表。
但是很可能,初始化MDC
上下文的更好的地方应该是服务层,因为您的服务可能还会知道您是否要运行“交易”或“商品”查询。
我找到了解决问题的方法。
我将追加器放入org.jooq.tools.LoggerListener
,
<Logger name="org.jooq.tools.LoggerListener" level="DEBUG">
<appender-ref ref="log_classify" />
</Logger>
初始化我的MDC后,jooq sql执行日志将添加到不同的文件中。
实际上,我不知道这是个好主意
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。