【发布时间】:2019-06-02 08:07:30
【问题描述】:
我有一个带有 spring web mvc 的项目并使用 Log4J。但是一个库(PDFBox / openhtml2pdf)确实使用了 Apache Commons Logging。我想禁用它(或者更好,将其缩小到服务器日志级别)。正如here 和here 所写,我必须把
java.util.logging.Logger.getLogger("org.apache.pdfbox")
.setLevel(java.util.logging.Level.OFF);
在主类中的某个地方(主函数或静态初始化块)。不幸的是,我不知道我的主要课程是什么(我一定有一个吗?)。 pom.xml 中没有 MainClass 或 start-class 或其他定义。那么,我必须在 Spring Web Mvc 项目中的什么地方放线才能在一切开始之前执行它呢?
-- 编辑:
我尝试的另一种方法是在 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>
但这并没有帮助。
-- 编辑 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>
我们可以看到here,我的 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,但正如 here 所提到的,这是行不通的:
<logger name="org.apache.pdfbox" level="ERROR"/>
-- 编辑 4
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 在测试中
<?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>
【问题讨论】:
-
Spring 项目有
main类吗?我以为他们在启动时执行了一组侦听器。ApplicationContextListener或类似的东西。 -
好点。我只是假设 OP 正在使用类似 spring boot 或类似的东西,其中将有一个 main in app 源。如果它们在容器中运行,比如 tomcat,那么还有其他一系列可能性。在 OP 提供更多信息(即 log4j 配置、pom.xml、控制台输出)之前,我不确定还有什么可以建议的。
-
嗨@markspace,你说得对,显然没有主类。我不使用spring boot,但只使用spring WebMvc。那我就往ApplicationContextListener的方向去调查。
-
关于您的“编辑 3”,链接的 q/a 未提及使用 SLF4J。根据您的 pom.xml,您 正在 使用
slf4j和log4j-slf4j-impl,因此 log4j 配置 是相关的。使用 commons-logging、log4j 和 tomcat 6 非常复杂(在 SO 上搜索这些术语),并且 pdf 库可能在任何自定义配置开始运行之前正在初始化/记录。但是,对于您的mvn test示例而言,情况并非如此,因为在这种情况下,没有 tomcat。 -
@kaliatech 嗯好的,我添加了 log4j-config。
标签: java spring-mvc