简体   繁体   English

在 Spring 项目中禁用 Apache Commons 日志记录

[英]Disable Apache Commons Logging in Spring project

I have a project with spring web mvc and use Log4J .我有一个带有spring web mvc的项目并使用Log4J But one Library (PDFBox / openhtml2pdf) does use Apache Commons Logging.但是一个库(PDFBox / openhtml2pdf)确实使用了Apache Commons Logging。 I want to disable it (or better, narrow it down to Server log level).我想禁用它(或者更好,将其缩小到服务器日志级别)。 As written here and here I have to put正如这里这里所写的,我必须把

java.util.logging.Logger.getLogger("org.apache.pdfbox")
.setLevel(java.util.logging.Level.OFF);

somewhere in the main class (main function or static initializer block).在主类(主函数或静态初始化块)中的某处。 Unfortunately I have no idea, what my main class is (do I necessarily have one?).不幸的是,我不知道我的主要课程是什么(我一定有一个吗?)。 There is no MainClass or start-class or something defined in pom.xml .pom.xml没有MainClassstart-class或定义的东西。 So where do I have to put line in a Spring Web Mvc project to have it executed before everything starts?那么我必须在 Spring Web Mvc 项目中的哪里放置一行才能在一切开始之前执行它?

-- Edit: - 编辑:

Another approach I tried is to exclude commons-logging in pom-xml我尝试的另一种方法是在 pom-xml 中排除 commons-logging

    <dependency>
        <!-- Required for PDF export. -->
        <groupId>com.openhtmltopdf</groupId>
        <artifactId>openhtmltopdf-pdfbox</artifactId>
        <version>${openhtml-version}</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

But it did not help.但它没有帮助。

-- Edit 2: -- 编辑 2:

    <dependency>
        <!-- Required for PDF export. -->
        <groupId>com.openhtmltopdf</groupId>
        <artifactId>openhtmltopdf-pdfbox</artifactId>
        <version>${openhtml-version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>${pdfbox-version}</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

and

    <openhtml-version>0.0.1-RC12</openhtml-version>
    <pdfbox-version>2.0.8</pdfbox-version>

As we can see here , my version of opnehtml2pdf ships with pdfbox version 2.0.8.正如我们在此处看到的,我的 opnehtml2pdf 版本随附 pdfbox 2.0.8 版。

-- Edit 3 -- 编辑 3

I Use Spring Web MVC, not Spring Boot.我使用 Spring Web MVC,而不是 Spring Boot。 I Start my application with我开始我的应用程序

mvn tomcat7:run -f pom.xml

but the logging is especially annoying while testing with:但是在测试时日志记录特别烦人:

mvn -Dtest=TestClass test

Here are some parts of of my pom.xml这是我的 pom.xml 的一些部分

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                    http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>..</groupId>
<artifactId>..</artifactId>
<name>..</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java-version>1.8</java-version>
    <org.springframework-version>4.3.4.RELEASE</org.springframework-version>
    <org.springframework.security-version>4.2.0.RELEASE</org.springframework.security-version>

    ...

    <openhtml-version>0.0.1-RC12</openhtml-version>
    <jsoup-version>1.11.2</jsoup-version>
    <pdfbox-version>2.0.8</pdfbox-version>

</properties>

<dependencies>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${org.springframework-version}</version>
        <exclusions>
            <!-- Exclude Commons Logging in favor of SLF4j -->
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>but the errors but
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>

    ...

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${org.slf4j-version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-web</artifactId>
        <version>${log4j-version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${log4j-version}</version>
        <exclusions>
            <exclusion>
                <groupId>javax.mail</groupId>
                <artifactId>mail</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.jms</groupId>
                <artifactId>jms</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jdmk</groupId>
                <artifactId>jmxtools</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jmx</groupId>
                <artifactId>jmxri</artifactId>
            </exclusion>
        </exclusions>
        <scope>runtime</scope>
    </dependency>

    ...

    <dependency>
        <!-- Required for PDF export. -->
        <groupId>com.openhtmltopdf</groupId>
        <artifactId>openhtmltopdf-pdfbox</artifactId>
        <version>${openhtml-version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>${pdfbox-version}</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    ...


</dependencies>


<repositories>

    <!-- maven central repo -->
    <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>http://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
    </repository>

    <!-- spring main repo -->
    <repository>
        <id>springsource-repo</id>
        <name>SpringSource Repository</name>
        <url>http://repo.spring.io/release</url>
    </repository>
    <!-- For testing against latest Spring snapshots -->
    <!-- <repository> <id>org.springframework.maven.snapshot</id> <name>Spring 
        Maven Snapshot Repository</name> <url>http://maven.springframework.org/snapshot</url> 
        <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> 
        </snapshots> </repository> -->
    <!-- For developing against latest Spring milestones -->
    <!-- <repository> <id>org.springframework.maven.milestone</id> <name>Spring 
        Maven Milestone Repository</name> <url>http://maven.springframework.org/milestone</url> 
        <snapshots> <enabled>false</enabled> </snapshots> </repository> -->
    <!-- Hibernate -->
    <repository>
        <id>org.hibernate</id>
        <name>Hibernate Repository</name>
        <url>https://repository.jboss.org/nexus/content/groups/public/</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <!-- MySQL Connector -->
    <repository>
        <id>mysql</id>
        <name>MySQL Connector</name>
        <url>http://mvnrepository.com/artifact/mysql/mysql-connector-java/</url>
    </repository>
    <!-- jitpack.io for pfdbox-layout -->
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-version}</version>
            <configuration>
                <source>${java-version}</source>
                <target>${java-version}</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>${maven-war-version}</version>
            <configuration>
                <warName>data</warName>
            </configuration>
            <executions>
                <execution>
                    <id>package</id>
                    <phase>package</phase>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>${maven-dependency-version}</version>
            <executions>
                <execution>
                    <id>install</id>
                    <phase>install</phase>
                    <goals>
                        <goal>sources</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>${aspectj-maven-version}</version>
            <configuration>
                <source>${java-version}</source>
                <target>${java-version}</target>
                <complianceLevel>${java-version}</complianceLevel>
                <verbose>false</verbose>
                <Xlint>ignore</Xlint>
                <showWeaveInfo>false</showWeaveInfo>
                <aspectLibraries>
                    <aspectLibrary>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-aspects</artifactId>
                    </aspectLibrary>
                </aspectLibraries>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <!-- AspectJ -->
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjrt</artifactId>
                    <version>${org.aspectj-version}</version>
                </dependency>

                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjtools</artifactId>
                    <version>${org.aspectj-version}</version>
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <!-- same version as failsafe plugin -->
            <version>${maven-failsafe-version}</version>
            <configuration>
                <junitArtifactName>junit:junit</junitArtifactName>
                <includes>
                    <include>**/Test*.java</include>
                </includes>
                <excludes>
                    <exclude>**/ITest*.java</exclude>
                    <exclude>**/*_Roo_*</exclude>
                </excludes>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>${maven-failsafe-version}</version>
            <configuration>
                <includes>
                    <include>**/ITest*.java</include>
                </includes>
                <excludes>
                    <exclude>**/Test*.java</exclude>
                    <exclude>**/*_Roo_*</exclude>
                </excludes>
            </configuration>
            <executions>
                <execution>
                    <id>integration-test</id>
                    <goals>
                        <goal>integration-test</goal>
                    </goals>
                </execution>
                <execution>
                    <id>verify</id>
                    <goals>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>${maven-tomcat-version}</version>
            <configuration>
                <uriEncoding>UTF-8</uriEncoding>
                <path>/data</path>
            </configuration>
        </plugin>
    </plugins>
</build>
<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>${maven-javadoc-version}</version>
        </plugin>
    </plugins>
</reporting>
</project>

The warnings I try to get get rid of are like these:我试图摆脱的警告是这样的:

com.openhtmltopdf.css-parse WARNING:: (/#inline_style_1) Found : where ; or } was expected at line 1. Skipping declaration.
com.openhtmltopdf.load INFO:: TIME: parse stylesheets  131ms

-- Edit 3 -- 编辑 3

I also tried with log4j-config, but as mentioned here this can not work:我也尝试过 log4j-config,但正如这里提到的这行不通:

<logger name="org.apache.pdfbox" level="ERROR"/>

-- Edit 4 -- 编辑 4

Log4J main: Log4J主要:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Configuration>

<Appenders>
    <Console name="CONSOLE" target="SYSTEM_OUT">
        <PatternLayout pattern="%-5p[%d{DATE}]: %c - %m%n" />
    </Console>

    <RollingFile name="ROLLING"
                 fileName="...log"
                 filePattern="...log">
        <PatternLayout pattern="%-5p[%d{DATE}]: %c - %m%n" />
        <Policies>
            <SizeBasedTriggeringPolicy size="10240KB" />
        </Policies>
        <DefaultRolloverStrategy max="5" />
    </RollingFile>

    ... other files ...

</Appenders>
<Loggers>
    <logger name="org.springframework.web" level="info" />

    <logger name="de.my.package" level="info" />
    <logger name="de.my.package.controller" level="info" />
    <logger name="de.my.package.service" level="info" />
    <logger name="de.my.package.dao" level="info" />
    <logger name="de.my.package.service.IIPService" level="off" />

    <logger name="org.elasticsearch" level="info" />
    <logger name="com.zaxxer.hikari" level="info" />

    <Logger name="Profiling" additivity="false">
        <AppenderRef ref="..." />
    </Logger>

    <Logger name="DataIntegrityLogger" additivity="false">
        <AppenderRef ref="..." />
    </Logger>

    <Root level="info">
        <AppenderRef ref="ROLLING" />
    </Root>

    <logger name="org.apache.pdfbox" level="ERROR"/>

</Loggers>
</Configuration>

log4jsonfig in test测试中的 log4jsonfig

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Configuration>

<Appenders>
    <Console name="CONSOLE" target="SYSTEM_OUT">
        <PatternLayout pattern="%-5p: %c - %m%n" />
    </Console>
</Appenders>



<Loggers>
    <Root level="info">
    </Root>

    <logger name="org.apache.pdfbox" level="ERROR"/>
</Loggers>
</Configuration>

EDIT编辑

Per newer comments and edits to question, you are configuring org.apache.pdfbox logger, however, in example you gave of logging statements that you are trying to disable, you are showing output from logger com.openhtmltopdf .根据较新的评论和对问题的编辑,您正在配置org.apache.pdfbox记录器,但是,在您提供的尝试禁用的日志记录语句的示例中,您正在显示记录器com.openhtmltopdf输出。 Instead of, or in addition to, the current log4j config, you would need to add <logger name="com.openhtmltopdf" level="ERROR"/> .除了当前的 log4j 配置之外,您还需要添加<logger name="com.openhtmltopdf" level="ERROR"/>

ORIGINAL原来的

To find your main class you might try searching recursively for void main( or main ( .要找到您的主类,您可以尝试递归搜索 void main(main ( .

But per suggestion from @nathan-hughes in comments, I think would be better to exclude commons-logging.但是根据@nathan-hughes 在评论中的建议,我认为最好排除 commons-logging。

And then per your more recent comment, I think you need to exclude from the pdfbox library, not the openhtmltopdf-pdfbox library which includes pdfbox, that then transitively includes commons-logging.然后根据你最近的评论,我认为你需要从 pdfbox 库中排除,而不是包含 pdfbox 的 openhtmltopdf-pdfbox 库,然后传递地包括 commons-logging。 Exclusions aren't transitive.排除不是可传递的。

<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>pdfbox</artifactId>
  <exclusions>
     <exclusion>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
     </exclusion>
  </exclusions>
</dependency>

I was getting over 2400 DEBUG log lines in a Spring Boot Test from org.apache.commons.beanutils.converters.我在来自 org.apache.commons.beanutils.converters 的 Spring Boot 测试中获得了超过 2400 条调试日志行。

For me adding a logback-test.xml file into the resources folder suppressed all these annoying messages.对我来说,将 logback-test.xml 文件添加到资源文件夹中可以抑制所有这些烦人的消息。

oacbconverters.BooleanConverter : Setting default value: false oacbconverters.BooleanConverter :设置默认值:false

oacbconverters.BooleanConverter : Converting 'Boolean' value 'false' to type 'Boolean' oacbconverters.BooleanConverter : No conversion required, value is already a Boolean oacbconverters.ByteConverter : Setting default value: 0 oacbconverters.BooleanConverter :将“Boolean”值“false”转换为“Boolean”类型 oacbconverters.BooleanConverter :不需要转换,值已经是布尔值 oacbconverters.ByteConverter :设置默认值:0

etc等等

Here is the logback-test.xml I used这是我使用的 logback-test.xml

<?xml version="1.0" encoding="UTF-8"?> 
<configuration>
  <include resource="org/springframework/boot/logging/logback/base.xml" />
  <logger name="org.springframework" level="DEBUG"/>
  <logger name="org.apache.commons.beanutils.converters" level="OFF"/>
</configuration>

Remove Apache Commons Logging ......删除 Apache Commons 日志......

<dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.24</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

Exclude Any Dependencies from It's Parent从其父项中排除任何依赖项

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>                                               <!--Exclude Dependencies-->
        <exclusion>
                <groupId>org.springframework.boot</groupId>         <!-- Group ID -->
                <artifactId>spring-boot-starter-logging</artifactId> <!--Name Of Exclude Starter -->
        </exclusion>
    </exclusions>
</dependency>

Exclude Dependencies From Child's Child ......从孩子的孩子中排除依赖......

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>                                   <!-- Exclude dependency from parent  -->
        <exclusion>                                     <!-- Exclude Log4J-->
        <groupId>org.apache.logging.log4j</groupId>         <!-- group name of whose dependency want to exclude-->
        <artifactId>log4j-to-slf4j</artifactId>             <!-- Jar Name-->
        </exclusion>

        <exclusion>                                     <!-- Exclude LogBack-->
            <groupId>ch.qos.logback</groupId>               <!-- group name of whose dependency want to exclude-->
            <artifactId>logback-classic</artifactId>        <!-- Jar Name-->
        </exclusion>
    </exclusions>
</dependency>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM