2014-12-23 84 views
0

我一直在使用創造了對自定義日誌記錄在我的應用程序的多個SLF4J綁定 - SLF4J,跟隨下面的鏈接,SLF4J:類路徑中包含了與Maven

http://javaeenotes.blogspot.com/2011/12/custom-slf4j-logger-adapter.html

它的做工精細用樣品HelloWorldProgram這樣,

public class HelloWorld { 
    public static void main(String[] args) { 
     Logger logger = LoggerFactory.getLogger(HelloWorld.class); 
     logger.info("Hello World"); 
    } 
} 

但是,如果我整合了相同與我的Maven項目,在這裏我使用Spring創建日誌文件,

我得到下面的錯誤。嘗試了許多不同的方式來解決問題,但沒有運氣。

11:08:59,486 ERROR [STDERR] SLF4J: Class path contains multiple SLF4J bindings. 
11:08:59,486 ERROR [STDERR] SLF4J: Found binding in [/WEB-INF/classes/org/slf4j/impl/StaticLoggerBinder.class] 
11:08:59,486 ERROR [STDERR] SLF4J: Found binding in [/WEB-INF/lib/logback-classic-1.0.13.jar/org/slf4j/impl/StaticLoggerBinder.class] 
11:08:59,486 ERROR [STDERR] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
11:08:59,496 ERROR [STDERR] SLF4J: Actual binding is of type [org.slf4j.impl.MyLoggerFactory] 

的pom.xml

<dependencies> 

    <!-- spring core --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${spring.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>c3p0</groupId> 
     <artifactId>c3p0</artifactId> 
     <version>0.9.1.2</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- logging dependencies --> 
    <!-- <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>log4j-over-slf4j</artifactId> 
     <version>${slf4j.version}</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jcl-over-slf4j</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jul-to-slf4j</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.9</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>1.0.13</version> 
     <exclusions> 
      <exclusion> 
       <!-- Defined below --> 
       <artifactId>slf4j-api</artifactId> 
       <groupId>org.slf4j</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-core</artifactId> 
     <version>1.0.13</version> 
     <exclusions> 
      <exclusion> 
       <!-- Defined below --> 
       <artifactId>slf4j-api</artifactId> 
       <groupId>org.slf4j</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.cassandra</groupId> 
     <artifactId>cassandra-all</artifactId> 
     <version>0.8.1</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-jdk14</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency>  

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${spring.version}</version> 
     <scope>test</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.owasp.esapi</groupId> 
     <artifactId>esapi</artifactId> 
     <version>2.1.0</version> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-configuration</groupId> 
       <artifactId>commons-configuration</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>commons-beanutils</groupId> 
       <artifactId>commons-beanutils-core</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>commons-fileupload</groupId> 
       <artifactId>commons-fileupload</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>commons-io</groupId> 
       <artifactId>commons-io</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>xom</groupId> 
       <artifactId>xom</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.beanshell</groupId> 
       <artifactId>bsh-core</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.owasp.antisamy</groupId> 
       <artifactId>antisamy</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
</dependencies> 

<build> 
    <finalName>${project.artifactId}</finalName>       
    <plugin> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <configuration> 
      <classpathDependencyExcludes> 
       <classpathDependencyExcludes>ch.qos.logback:logback-classic</classpathDependencyExcludes> 
      </classpathDependencyExcludes> 
     </configuration> 
     </plugin> 
    </plugins> 
</build> 

Logback.xml

<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"> 
     <resetJUL>true</resetJUL> 
</contextListener> 


<appender name="appLogFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      //log file creation goes here 
     </rollingPolicy>   
</appender> 

誰能幫助我在這個問題?

+0

嘗試添加< scope>編譯到的logback經典依賴 – StanislavL

回答

1

按照在錯誤消息(http://www.slf4j.org/codes.html#multiple_bindings)給出的鏈接,SLF4J被設計爲「綁定與一個只有一個底層日誌框架在一個時間」。

您目前有兩個在classpath:

  • 自己的定製粘合劑(/WEB-INF/classes/org/slf4j/impl/StaticLoggerBinder.class)
  • 和的logback經典的一個

當SLF4J發現多個綁定時,它會隨機選擇一個並使用它。在你的情況下,它會選擇你的自定義綁定(基於錯誤消息「Actual binding is of type [org.slf4j.impl.MyLoggerFactory]」的最後一行),但不能保證每次都這樣做。

你基本上有兩種選擇:

  • 如果你想使用自己定製的粘合劑,那麼你應該從你的POM刪除的logback依賴性。
  • 另外,你可以顯然刪除自己的自定義聯編程序(但我猜這不是你想要的)。
+0

我可能失去了一些東西,但對我來說你的兩個選項是很清楚的,或者使用的logback或使用自定義日誌記錄。如果您使用自定義日誌記錄,那麼您將完全刪除logback,包括其配置。即刪除logback.xml文件。唯一的另一種可能是以某種方式使用logback而不通過SLF4J,但據我所知,不使用SLF4J就不可能使用logback,所以這是行不通的。 – DB5