BEA Weblogic9.1jでLog4jを使う(メモ)

Weblogic9.2jでは問題が無いのだが、同9.1jはそのままの環境設定ではLog4jが使えないようで以下の例外が発生する。

syncInitServlet の init メソッドがバックグラウンドで実行中に失敗しました。例外は次のとおりです。java.lang.NoSuchMethodError: log
java.lang.NoSuchMethodError: log
	at org.apache.commons.logging.impl.Log4JCategoryLog.error(Log4JCategoryLog.java:149)
	at org.apache.struts.action.ActionServlet.init(ActionServlet.java:364)
	at org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.init(AutoRegisterActionServlet.java:92)
	at org.apache.beehive.netui.pageflow.PageFlowActionServlet.init(PageFlowActionServlet.java:125)
	at com.bea.console.internal.ConsoleActionServlet.init(ConsoleActionServlet.java:185)
	at javax.servlet.GenericServlet.init(GenericServlet.java:256)
	at weblogic.servlet.AsyncInitServlet.initDelegate(AsyncInitServlet.java:94)
	at weblogic.servlet.internal.WebAppServletContext$AsyncInitRequest.run(WebAppServletContext.java:1641)
	at weblogic.work.ServerWorkManagerImpl$WorkAdapterImpl.run(ServerWorkManagerImpl.java:518)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:207)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:179)

対処方法は以下の通り。

  • wllog4j.jar, wlcommons-logging.jar, log4j.jarを対象プロジェクトのdomain/libディレクトリにコピーして配置
  • 対象プロジェクトのdomainディレクトリにcommons-logging.propertiesという名前のファイルを以下の内容で作成する。
    • commons-logging.properties
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
  • あとは通常通り(log4jConfig.xmlはdomainディレクトリに配置するか、Java起動オプションで明示する)

ログサービスが実質Log4だけだった時は(jar hellはあったが)楽だったのだが、今やJSDK謹製のロギングとcommon-loggingがあるので非常にややこしくなっている。勘弁して欲しい。