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ログです