先日、GAE SDK for Javaでのログのダウンロードについて書きました。
GAE/Jはデフォルトでjava.util.loggingを使う様になっていますが、デフォルトのままではデバッグの時ちょっと見づらいです。
そこで、設定ファイルの使い慣れている log4j に移行する事にしました。
プロジェクトへ log4j.jar を追加
apache.orgから、log4j-1.2.15.jar をダウンロードして、war/WEB-INF/libに置きます。
この辺の依存性の管理は、後日 maven でやりたいなぁ。
設定ファイルの編集
以前構築したeclipseの開発環境では、src/log4j.properties がデフォルトで作成されていました。
これを編集すれば良いようです。
デフォルトでは、こうなっています。
# A default log4j configuration for log4j users. # # # To use this configuration, deploy it into your application's WEB-INF/classes # directory. You are also encouraged to edit it as you like. # Configure the console as our one appender log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n # tighten logging on the DataNucleus Categories log4j.category.DataNucleus.JDO=WARN, A1 log4j.category.DataNucleus.Persistence=WARN, A1 log4j.category.DataNucleus.Cache=WARN, A1 log4j.category.DataNucleus.MetaData=WARN, A1 log4j.category.DataNucleus.General=WARN, A1 log4j.category.DataNucleus.Utility=WARN, A1 log4j.category.DataNucleus.Transaction=WARN, A1 log4j.category.DataNucleus.Datastore=WARN, A1 log4j.category.DataNucleus.ClassLoading=WARN, A1 log4j.category.DataNucleus.Plugin=WARN, A1 log4j.category.DataNucleus.ValueGeneration=WARN, A1 log4j.category.DataNucleus.Enhancer=WARN, A1 log4j.category.DataNucleus.SchemaTool=WARN, A1
上記に、ルートロガーの定義
log4j.rootLogger=INFO, A1
を追記して、
ログファイルのフォーマットを好みに変更
log4j.appender.appLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%F:%L] - %m%n
して、
Jakarta Velocity関係のデバッグログとかが多くて困るので、
log4j.logger.org.apache.velocity=WARN,A1
WARNに変更する設定を追加しました。
最終的にこうなりました。
# # log4j.properties for GAE/J # log4j.rootLogger=DEBUG,A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.appLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%F:%L] - %m%n log4j.logger.org.apache.velocity=WARN,A1 log4j.category.DataNucleus.JDO=WARN, A1 log4j.category.DataNucleus.Persistence=WARN, A1 log4j.category.DataNucleus.Cache=WARN, A1 log4j.category.DataNucleus.MetaData=WARN, A1 log4j.category.DataNucleus.General=WARN, A1 log4j.category.DataNucleus.Utility=WARN, A1 log4j.category.DataNucleus.Transaction=WARN, A1 log4j.category.DataNucleus.Datastore=WARN, A1 log4j.category.DataNucleus.ClassLoading=WARN, A1 log4j.category.DataNucleus.Plugin=WARN, A1 log4j.category.DataNucleus.ValueGeneration=WARN, A1 log4j.category.DataNucleus.Enhancer=WARN, A1 log4j.category.DataNucleus.SchemaTool=WARN, A1
- * *あとは、こんなユーティリティクラスを作っておいて、
package my.package.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class MyLog { public static final Log log = LogFactory.getLog(MyLog.class); }
コードの中で、こんな風に書くだけです。
MyLog.log.info("something to logging");
こでで、eclipse上のコンソールログはちゃんと出る様になりました。
App Engine上でのログ出力
WEB-INF/appengine-web.xml を編集します。
デフォルトでは、こうなっています。
こんな風に修正します。
これで一応、appengine.google.comのlogsに出力される様になりました。
でもちょっと見にくい。時間もずれとるし。
今後の課題です。
参考サイト
Google App Engine/Javaでcommons-logging+Log4jでロギングする。 – 北海道を愛するプログラマの覚書