【问题标题】:New Maven dependcy turns on jOOQ logging新的 Maven 依赖项开启 jOOQ 日志记录
【发布时间】:2016-07-10 09:08:45
【问题描述】:

最近我为项目添加了新的依赖项以生成 .xls 文件。

pom.xml

    <dependency>
      <groupId>org.jxls</groupId>
      <artifactId>jxls</artifactId>
      <version>2.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.jxls</groupId>
      <artifactId>jxls-poi</artifactId>
      <version>1.0.0</version>
    </dependency>

代码

 public StreamingOutput createStreamedExcelReport(Map<String, Object> params, String templateName, String[] columnsToHide) throws Exception {
        try(InputStream is = ReportGenerator.class.getResourceAsStream(templateName)) {
            assert is != null;
            final Transformer transformer = PoiTransformer.createTransformer(is);
            AreaBuilder areaBuilder = new XlsCommentAreaBuilder(transformer);
            List<Area> xlsAreaList = areaBuilder.build();
            Area xlsArea = xlsAreaList.get(0);
            Context context = new PoiContext();
            for(Map.Entry<String, Object> entry : params.entrySet()) {
                context.putVar(entry.getKey(), entry.getValue());
            }
            xlsArea.applyAt(new CellRef("Sheet1!A1"), context);
            xlsArea.processFormulas();
            return new StreamingOutput() {
                @Override
                public void write(OutputStream out) throws IOException {
                    ((PoiTransformer) transformer).getWorkbook().write(out);
                }
            };
        }
    }

不幸的是,它可能会打开 jOOQ 调试日志,这真的很糟糕,因为它会记录所有数据库查询。应用程序正在对 .xls 进行大量查询,因此它不应该记录(约 1.5GB 输出在 3 分钟内)。

日志示例

08:08:23.094 [http-bio-8080-exec-7] DEBUG org.jooq.tools.LoggerListener - Executing query          : select "XXXXXXXX"."XXX", "XXXXXXX"."XXXXXXX" from "XXXXX" where "XXXXX"."XXX" = ?
08:08:23.095 [http-bio-8080-exec-7] DEBUG org.jooq.tools.LoggerListener - -> with bind values      : select "XXXXXXXX"."XXX", "XXXXXXX"."XXXXXXX" from "XXXXX" where "XXXXX"."XXX" = 'XXXX.XXXXXXXXXXXXXXXXXXX'
08:08:23.098 [http-bio-8080-exec-7] DEBUG org.jooq.tools.StopWatch - Query executed           : Total: 4.17ms
08:08:23.099 [http-bio-8080-exec-7] DEBUG org.jooq.tools.LoggerListener - Fetched result           : +----------------------------------------+-----------+
08:08:23.100 [http-bio-8080-exec-7] DEBUG org.jooq.tools.LoggerListener -                          : |KEY                                     |VALUE      |
08:08:23.100 [http-bio-8080-exec-7] DEBUG org.jooq.tools.LoggerListener -                          : +----------------------------------------+-----------+
08:08:23.100 [http-bio-8080-exec-7] DEBUG org.jooq.tools.LoggerListener -                          : |xxxx.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|0 0 3 * * ?|
08:08:23.100 [http-bio-8080-exec-7] DEBUG org.jooq.tools.LoggerListener -                          : +----------------------------------------+-----------+
08:08:23.100 [http-bio-8080-exec-7] DEBUG org.jooq.tools.StopWatch - Finishing                : Total: 6.756ms, +2.586ms

【问题讨论】:

    标签: java maven logging pom.xml jooq


    【解决方案1】:

    通过日志配置彻底修复

    jOOQ 默认通过它首先在类路径中发现的以下三个日志框架中的任何一个使用调试日志:slf4j、log4j、java.util.logging。 jxls 库通过 slf4j as can be seen in its pom.xml 对 logback 有依赖:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.12</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.12</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.1.3</version>
    </dependency>
    

    为了关闭 jOOQ 调试日志,您应该相应地配置您的日志框架 (in this case: logback)。

    jOOQ 中的快速修复:

    您也可以通过指定直接关闭大部分登录 jOOQ:

    Settings.withExecuteLogging(false);
    

    有关详细信息,请参阅: http://www.jooq.org/doc/latest/manual/sql-execution/logging

    【讨论】:

      【解决方案2】:

      您可以在依赖项中使用 exclusion 以避免使用 jooQ 日志记录:

      <dependency>
          <groupId>org.jxls</groupId>
          <artifactId>jxls</artifactId>
          <version>2.0.0</version>
          <exclusion>         
             <groupId>org.jooq</groupId>
             <artifactId>jooq</artifactId>
          </exclusion>
      </dependency>
      <dependency>
          <groupId>org.jxls</groupId>
          <artifactId>jxls-poi</artifactId>
          <version>1.0.0</version>
          <exclusion>         
             <groupId>org.jooq</groupId>
             <artifactId>jooq</artifactId>
          </exclusion>
      </dependency>
      

      注意:您将可能依赖于 jOOQ 日志记录的排除在外。

      【讨论】:

      • 您忘记了 ,但它仍在记录
      猜你喜欢
      • 2023-02-16
      • 1970-01-01
      • 2013-07-10
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2011-08-25
      • 2012-10-28
      相关资源
      最近更新 更多