2016-04-27 51 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