2011-06-20 25 views
4

SLF4J抱怨多個綁定,但這些看起來完全一樣:SLF4J警告差不多的結合存在重複

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [zip:C:/bea_domains/my_service_domain/servers/AdminServer/tmp/_WL_user/my-shared-app-lib/obaz3z/APP-INF/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [zip:C:/bea_domains/my_service_domain/servers/AdminServer/tmp/_WL_user/my-shared-app-lib/obaz3z/APP-INF/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 

有什麼辦法擺脫這種警告?這可能是什麼原因呢?

回答

5

目前有關於bug 138的討論,在我看來,與您所報告的問題相同。根據討論,「問題實際上是在清單中的多個類路徑中 - 如果存在多於EJB jar的綁定列表,WLS提供了完整的列表,即使這些類是相同的。這與ClassLoader行爲在WLS中「。如果你想真的刪除這個警告(儘管不是致命的),那麼這個bug中就有一個附件,你可以用它修補slf4j。

0

除了在Jasonw的回答中描述的多個類路徑的問題之外,這個問題也可能是由嘲諷框架PowerMock造成的。

PowerMock使用自己的類加載器(MockClassLoader),它使用自己的機制來委派父類加載器。這也可能導致ClassLoader.getResources()兩次返回相同的資源,從而觸發警告。

這似乎是由PowerMock issue 380中描述的更改引起的。

SLF4J(上面鏈接)中#138的修復方法也解決了這個問題,所以對於SLF4J 1.6.2+,它不應該再發生。