1

私はWebアプリケーションで働いていました。WEB-INF/lib/*.jar との戦争から jar の重複を削除しようとしました。これは、戦争から瓶を除外するのに役立ちました. websphere で耳を展開しているときに、次の問題があります。

log4j.jar と common-logging1.1.jar を含む war クラス パスを確認しました。

親切に助けて!!!

エラーログ:

[7/6/12 22:34:10:577 CEST] 00000165 webapp        E com.ibm.ws.webcontainer.webapp.WebApp notifyServletContextCreated SRVE0283E: Exception caught while initializing context: {0}
    org.apache.commons.logging.LogConfigurationException: User-specified log class 'org.apache.commons.logging.impl.Log4JLogger' cannot be found or is not useable.
    at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:874)
    at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:604)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:336)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:310)
4

1 に答える 1

2

WebSphere 6.1 には、Commmons Logging 自体が含まれており、Web アプリケーションより上位のクラスローダーによってロードされます。(この JSPをアプリケーションにデプロイし、JCL クラス名のいずれかを入力すると、JCL クラスがどこからロードされるかを確認できます。) したがって、log4j クラスをロードするように構成された JCL がありますが、より高いレベル (親) のクラスローダーは「下位レベルの Web アプリケーション クラスローダーから log4j クラスが表示されます。

そのため、特に WebSphere に含まれているバージョン (1.0) ではなく 1.1 バージョンの JCL が必要な場合の 1 つの解決策は、WebSphere クラスローダー ポリシーをparent lastに変更することです。

クラスローダー ポリシーを変更すると他の影響が生じる可能性があるため、もう 1 つのオプションは、WebSphere に含まれているバージョンを使用し、アプリケーション内のロギング メカニズムとして log4j を使用するように指示する手法を使用することです。ただし、WebSphere 6.1 には JCL1.0 全体が含まれていないため、アプリケーションとともに完全な JCL 1.0 をデプロイする必要があることに注意してください。

于 2012-07-09T15:35:50.060 に答える