Google App Engineでcron(サーブレット)を動かす際に、ログを出力(確認)したい場合の対処法。(公式の説明はこちらを参照。)
管理コンソールの “Main”-”Logs”を開くとログレベルを5段階(Debug,Info,Warning,Error,Critical)に分けて表示されているが、仕様としてユーザが開発したコードからの出力も処理できるようになっていて、標準ではコードからの出力を以下のようにレベル分けしている。
・標準出力(System.out):Info
・標準エラー出力(System.err):Warning
一方、アプリケーションのログに関する設定は、WEB-INFの下の’appengine-web.xml’, ‘logging.properties’の2つのファイルに定義されていて、デフォルト状態では以下のようになっている。
<!-- appengine-web.xml より抜粋--> <!-- Configure java.util.logging --> <system-properties> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> </system-properties>
# logging.propertiesより抜粋 # Set the default logging level for all loggers to WARNING .level = WARNING
すなわち、取り込むログのレベルが’Warning’になっているので、そのままでは標準出力がトラップされない。そこで、
(1)取り込むエラーレベルを’Info’に拡大する、または
(2)java.util.logging.Loggerを利用して明示的にログを出力する
ことで、管理コンソールからもログが見れるようになる。
(2)については以下のようにコードを書けばOK。
// Java import java.util.logging.Logger; // ... public class MyServlet extends HttpServlet { private static final Logger log = Logger.getLogger(MyServlet.class.getName()); public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { log.info("An informational message."); log.warning("A warning message."); log.severe("An error message."); } }
なお、標準出力の内容もトラップできるので、log4jなどのメジャーなツールも利用できる。