Отключить Apache Commons Logging в проекте Spring - PullRequest
0 голосов
/ 07 января 2019

У меня есть проект с spring web mvc и я использую Log4J. Но одна библиотека (PDFBox / openhtml2pdf) использует протоколирование Apache Commons. Я хочу отключить его (или, лучше, сузить до уровня журнала сервера). Как написано здесь и здесь Я должен поставить

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

где-то в главном классе (основная функция или статический блок инициализатора). К сожалению, я понятия не имею, каков мой основной класс (обязательно ли у меня один?). Не существует MainClass или начального класса или чего-то определенного в pom.xml. Так, где я должен поместить строку в проект Spring Web Mvc, чтобы он выполнялся до того, как все запустится?

- Изменить:

Другой подход, который я попробовал, состоит в том, чтобы исключить ведение журнала в общем виде в pom-xml

    <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>

Но это не помогло.

- Изменить 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>

и

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

Как мы видим здесь , моя версия opnehtml2pdf поставляется с версией pdfbox 2.0.8.

- Изменить 3

Я использую Spring Web MVC, а не Spring Boot. Я запускаю свое приложение с

mvn tomcat7:run -f pom.xml

но регистрация особенно раздражает при тестировании с:

mvn -Dtest=TestClass test

Вот некоторые части моего 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>

Предупреждения, от которых я пытаюсь избавиться, выглядят так:

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

- Изменить 3

Я также пытался с log4j-config, но как уже упоминалось здесь это может не работать:

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

- Изменить 4

Log4J main:

<?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 в тесте

<?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>

1 Ответ

0 голосов
/ 07 января 2019

EDIT

Для новых комментариев и правок к вопросу вы настраиваете org.apache.pdfbox logger, однако, в примере, который вы приводили для операторов регистрации, которые вы пытаетесь отключить, вы показываете выходные данные из logger com.openhtmltopdf. Вместо текущей конфигурации log4j или в дополнение к ней вам необходимо добавить <logger name="com.openhtmltopdf" level="ERROR"/>.

ORIGINAL

Чтобы найти свой основной класс, вы можете попробовать рекурсивно искать пустоту main( или main (.

Но в соответствии с предложением @ nathan-hughes в комментариях, я думаю, было бы лучше исключить ведение журнала с помощью общего ресурса.

И затем, в соответствии с вашим последним комментарием, я думаю, что вам нужно исключить из библиотеки pdfbox, а не библиотеку openhtmltopdf-pdfbox, которая включает в себя pdfbox, который затем транзитивно включает в себя ведение журнала общего достояния. Исключения не являются переходными.

<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>pdfbox</artifactId>
  <exclusions>
     <exclusion>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
     </exclusion>
  </exclusions>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...