2016-04-27 54 views
0

每个spring mvc项目库都使用它自己的日志记录框架即viz。 log4j,slf4j,logback,jboss-logging,commons-logging等,下面给出maven集成。GlassFish 4,没有日志框架依赖项在pom.xml中工作

的pom.xml

<log4j.version>1.6.5</log4j.version> 
<slf4j.version>1.7.16</slf4j.version> 
<slf4j.log4j13.version>1.0.1</slf4j.log4j13.version> 
<logback.version>1.1.2</logback.version> 
<jboss.logging.version>3.3.0.Final</jboss.logging.version> 
<commons.logging.version>1.2</commons.logging.version> 

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-bom</artifactId> 
     <version>2.5</version> 
     <scope>import</scope> 
     <type>pom</type> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

<dependencies> 
<dependency> 
    <groupId>ant</groupId> 
    <artifactId>ant-jakarta-log4j</artifactId> 
    <version>1.6.1</version> 
</dependency> 

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

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

<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
    <version>${logback.version}</version> 
</dependency> 

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

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.17</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-api</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-core</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-web</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-jcl</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-slf4j-impl</artifactId> 
</dependency> 
</dependencies> 

这是在运行项目

SLF4J显示的严重错误:类路径中包含多个SLF4J绑定。

SLF4J:见于结合[JAR:文件:/WEB-INF/lib/log4j-slf4j-impl-2.5.jar /org/slf4j/impl/StaticLoggerBinder.class]

SLF4J:找到结合在[jar:file:/WEB-INF/lib/logback-classic-1.1.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J:在[jar:file:/ WEB -INF/lib/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J:在[jar:file:/ WEB-INF/lib/slf4j-log4j13中找到绑定-1.0.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J:实际结合的类型为[org.apache.logging.slf4j.Log4jLoggerFactory] ​​

ERROR StatusLogger否log4j2配置文件中找到。使用默认配置:仅将错误记录到控制台。

每个日志框架都是需要包含的项目。但有没有什么窍门可以在运行项目时保留外部库所需的日志框架工作者而不会出错。

回答

1

通常,您将拥有多个组件,每个组件都使用不同的日志记录API。你通常想要做的是将每一个绑定到特定的日志实现。例如,Spring使用commons-logging将其路由到Log4j 2,您将包含log4j-jcl jar。同样,要将SLF4J路由到Log4j 2,您将包含log4j-slf4j-impl jar。由于它是另一个日志记录实现,因此不会包含任何Logback Jar。在上面出现的错误的情况下,显示SLF4J具有Log4j 2 SLF4J绑定,logback,log4j1.2绑定和log4j 1.3绑定。你应该只有一个,所以删除那些你不想使用的罐子。

请注意,SLF4J告诉你它选择了Log4j 2绑定,但是你从Log4j 2得到一个错误,通知你它找不到配置文件 - 通常这是log4j2.xml。

+0

这些是从pom.xml中和项目中删除的artifactId的运行没有任何严重的错误,但需要检查的地方类称为排除日志框架是否起作用: 蚂蚁雅加达的log4j SLF4J的API JCL-过SLF4J 的logback经典 SLF4J-log4j13 Vivaswan