当前位置: 首页 > 知识库问答 >
问题:

使用MDC的JOOQ日志

缑修齐
2023-03-14

我使用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是否支持这个?

共有2个答案

岑彬炳
2023-03-14

jOOQ并没有将其与现成的记录器深度集成,但您可以将您的org.slf4j.MDC放在一起。在运行SQL查询之前,例如在生成SQL语句后的事件中,将调用放入一个ExecuteListener,正则表达式与查询匹配以做出决策。或者,使用VisitListener,您可以更早地做出这个决定,尝试匹配查询中可能存在的特定表。

但很可能,初始化MDC上下文的更好位置是在服务层,因为您的服务可能还会知道您是要运行“交易”还是“商品”查询。

莫誉
2023-03-14

我想办法解决我的问题。

我将appender放入org.jooq.tools.LoggerListener中,

    <Logger name="org.jooq.tools.LoggerListener" level="DEBUG">
        <appender-ref ref="log_classify" />
    </Logger>

初始化MDC后,jooq sql执行日志将添加到不同的文件中。

事实上,我不知道这是不是个好主意

 类似资料:
  • 问题内容: 是否有可能在运行时使用MDC命名日志文件。 我有一个单独的Web应用程序,该应用程序同时使用tomcat docbase被不同的名称调用。因此,我需要为每个文件设置单独的日志文件。 问题答案: 这可以在Logback(Log4J的后继者)中完成。 Logback旨在作为流行的log4j项目的后继者,从log4j离开的地方接手。 请参阅文档筛选器 SiftingAppender在引用和配

  • 我想知道如何在Spring批处理中使用MCD记录诸如和之类的内容。 下面是一些代码: Bootstrap.properties 这个文件有我的主要方法。当我用手动设置这里的字段时,我在日志中看到了它,但我不明白如何将我需要的实际信息放在这里。 如果有任何见解,我将不胜感激:)谢谢。

  • 我是ORM的忠实粉丝,特别是当涉及到。NET和实体框架时,使用LINQ使您的数据访问不那么乏味,更令人愉快。 然而,我目前正在研究Java,尤其是ORMS。我在SQL Server数据库中尝试了nHybernate--由于某些表中没有键(唯一约束),我开始查看Jooq。 不过,我已经设法使用JOOQ(V3.2.0)从SQL Server数据库生成了Java类--并非没有错误。 对于未找到类的异常,

  • 问题内容: 跟进如何在线程池中使用MDC?如何将MDC与?具体来说,我如何在执行任务之前包装一个MDC值? 问题答案: 以下内容似乎对我有用: 和 针对您的任务而不是普通的ForkJoinPool 运行任务。 代替扩展。

  • 问题内容: 现在,我正在使用如下结构:Appender: 记录器: 但是它不适用于MDC密钥。如何在xml中使用MDC密钥配置RollingFileAppender? 问题答案: 看一下RoutingAppender。也许这可以帮助您入门:

  • 我有一个基于Spring boot sleuth的应用程序。一切正常。我现在有这样的日志: 现在,我想将自定义MDC添加到我的日志中,例如合同引用。我想要这样的日志: 我尝试了各种方法,但都没有成功: 使用Spring Sleuth Tracer添加标签; 使用MDC. put(xxx, xxx)将logging.pattern.level=%5p%mdc添加到我的application.prop