2008/10
commons-loggingからLog4jを使う場合、以下に示すような
「commons-logging.propertiesとlog4j.xmlをクラスパス上に配置」
します。
[commons-logging.properties]
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
[log4j.xml]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="appl" class="org.apache.log4j.ConsoleAppender">
<param name="target" value="System.err" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yy/MM/dd HH:mm:ss:SSS zzz}] %-5p %-18C{1} %-12M: %m%n" />
</layout>
</appender>
<appender name="apache" class="org.apache.log4j.ConsoleAppender">
<param name="target" value="System.out" />
</appender>
<category name="org.apache" additivity="false">
<level value="INFO" />
<appender-ref ref="apache" />
</category>
<root>
<level value="DEBUG" />
<appender-ref ref="appl" />
</root>
</log4j:configuration>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="appl" class="org.apache.log4j.ConsoleAppender">
<param name="target" value="System.err" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yy/MM/dd HH:mm:ss:SSS zzz}] %-5p %-18C{1} %-12M: %m%n" />
</layout>
</appender>
<appender name="apache" class="org.apache.log4j.ConsoleAppender">
<param name="target" value="System.out" />
</appender>
<category name="org.apache" additivity="false">
<level value="INFO" />
<appender-ref ref="apache" />
</category>
<root>
<level value="DEBUG" />
<appender-ref ref="appl" />
</root>
</log4j:configuration>
Webアプリケーションの場合はWEB-INF/classes直下に配置すればいいことになります。
しかし、Websphereで実行すると
「Logの設定が効かない!!?」
WebsphereはAPサーバー自体がcommons-loggingを使っているようで
APサーバーのcommons-logging.propertiesが先に読み込まれて有効になっているようです。
ということでWSAD上または管理コンソールで
アプリケーション・オプションのEAR、WARのクラス・ローダー・モードを
PARENT_FIRST → PARENT_LAST
に変更します。
package sample; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class SampleServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().print("<h1>SampleServlet</h1>"); Log logger = LogFactory.getLog(this.getClass()); System.out.println(logger.getClass().getName()); logger.debug("DEBUGログです"); logger.info("INFOログです"); } }
[実行結果]
[07/05/09 10:09:40:328 JST] 7970971 SystemOut O org.apache.commons.logging.impl.Log4JLogger
[07/05/09 10:09:40:328 JST] DEBUG SampleServlet doGet : DEBUGログです
[07/05/09 10:09:40:344 JST] INFO SampleServlet doGet : INFOログです
[07/05/09 10:09:40:328 JST] DEBUG SampleServlet doGet : DEBUGログです
[07/05/09 10:09:40:344 JST] INFO SampleServlet doGet : INFOログです