1. 程式人生 > >【Hibernate】Hibernate3.x獨立執行時的Failed to load class "org.slf4j.impl.StaticLoggerBinder"錯誤

【Hibernate】Hibernate3.x獨立執行時的Failed to load class "org.slf4j.impl.StaticLoggerBinder"錯誤

按理說,如果Hibernate不依附於SSH執行,像《【Struts2+Hibernate3+Spring3】利用SSH整合,完成列印使用者表,使用者登入、註冊、修改密碼系統》(點選開啟連結)一樣,把hibernate-distribution-3.6.10.Final解壓之後,把根目錄的hibernate3.jar,hibernate-distribution-3.6.0.Final\lib\required下的所有jar,hibernate-distribution-3.6.0.Final\lib\jpa下的所有jar也就是那個hibernate-jpa-2.0-api-1.0.1.Final.jar,hibernate-distribution-3.6.0.Final\lib\optional\c3p0下的所有包,也就是那個c3p0-0.9.1.jar,拷貝到相應的Java工程載入同樣可以運行了,但是為什麼沒有Spring與Struts2的支援,就會出現如下圖的,Failed to load class "org.slf4j.impl.StaticLoggerBinder"錯誤呢?


這個問題在Hibernate4.x中沒有,可能意識到自己這樣是不對的,在Hibernate3.x中,Hibernate使用SLF4J API這個介面記錄日誌,但是在Hibernate的lib中,卻沒有提供Log4J的包,都不知道在想甚的,自己用了的lib包因為害怕與其它框架的日誌記錄包衝突卻不提供,導致自己無法獨立執行!

因此,我們要自己補充SLF4J API這個介面。

具體是開啟SLF4J官方網站(點選開啟連結),下載:


解壓之後,如下圖結構,版本號沒問題,取走其中的slf4j-log4j12-1.7.12.jar,載入到獨立執行的Hibernate3.x Java工程。


由於slf4j像Hibernate相容各種連線Mysql,Orcale等資料庫連線jar包的介面一樣,只是一個相容各種生成Java日誌jar包。還要下載一個真正工作的日誌jar包,這裡使用最大眾的log4j,雖然平時我們一般都不會記錄日誌的了……開啟Apache的官網(

點選開啟連結)如下圖,選擇log4j-1.2.17.zip(Windows)或者log4j-1.2.17.tar.gz(Linux)。


解壓之後,把apache-log4j-1.2.17下的log4j-1.2.17.jar,同樣載入到獨立執行的Hibernate3.x Java工程。

此時,獨立的Hibernate3.x已經可以運行了,不過還沒有完,執行時候還會出現如下的log4j:WARN Please initialize the log4j system properly警告:


要解決這個問題非常簡單,建立LOG4J 的配置檔案即可。如下圖在src目錄下建立配置檔案,右擊src資料夾,選擇選單New>File,檔名輸入log4j.properties,


在裡面寫入如下內容:

log4j.rootLogger=WARN, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
此時,Hibernate3.x終於可以自己獨立運行了,真的是暈死了……