Google App Engine/Javaでcommons-logging+Log4jでロギングする。
Google App Engineのスタブ(appengine-web.xml)に
<!-- Configure java.util.logging --> <system-properties> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> </system-properties>
とあるように、デフォルトの設定ではjava.util.loggingを使う設定になっている。
これと一緒に、src下にlog4j.propertiesの雛形が用意されている。
先のログでDWR2を配備した際に、commons-loggingを配置した。DWRは「org.directwebremoting.util.CommonsLoggingOutput」という奴が、commons-loggingを使って、Infoレベルで余計なログを吐く。
開発の際には、debugログが必要になるので、log4jを使う設定に変えてみる。
appengine-web.xmlの変更
commons-loggingは、システムプロパティーの設定を見に行く。これは、(上記のように)appengine-web.xmlに設定されているので、これを変更する。
<system-properties> <property name="org.apache.commons.logging.Log" value="org.apache.commons.logging.impl.Log4JLogger"/> </system-properties>
lo4j.propertiesの変更
A2というアペンダーを追加する。rootをDEBUGにして、DWRパッケージはWARN以上に設定。
log4j.rootLogger=DEBUG,A2 log4j.appender.A2=org.apache.log4j.ConsoleAppender log4j.appender.A2.layout=org.apache.log4j.PatternLayout log4j.appender.A2.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n log4j.logger.org.directwebremoting=WARN,A2
Demo.javaの変更
debugログを吐くように、Demo.javaを変更。呼び出されたら「say hello called. '渡された値(name)'」をConsoleに出力する。
package test; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * DWRのデモ * * 名前(name)を受け取って、「こんにちは、name」を返す。 * */ public class Demo { private static final Log log = LogFactory.getLog(Demo.class); public String sayHello(String name) { log.debug("say hello called. "+name); return "こんばんわ " + name + " さん"; } }