我使用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是否支持这一点?
发布于 2020-08-29 10:21:25
我找到了一个方法来回答我的问题。
我把我的附加器放进了org.jooq.tools.LoggerListener,
<Logger name="org.jooq.tools.LoggerListener" level="DEBUG">
<appender-ref ref="log_classify" />
</Logger>初始化MDC后,jooq sql执行日志将被添加到不同的文件中。
实际上,我不知道这是不是个好主意
发布于 2020-08-27 14:57:11
jOOQ没有与记录器进行开箱即用的深度集成,但是您可以在运行SQL查询之前将org.slf4j.MDC.put调用放在ExecuteListener中,例如,在ExecuteListener::renderEnd事件中,一旦生成了SQL语句,然后对查询进行正则匹配以做出决策。或者,使用VisitListener,您可以更早地做出这个决定,尝试匹配查询中可能存在的特定表。
但是,初始化MDC上下文的更好位置很可能是在服务层,因为您的服务可能也知道您将运行“交易”或“商品”查询。
https://stackoverflow.com/questions/63592039
复制相似问题