Google App Engineでサーブレットのログを出力/確認する

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などのメジャーなツールも利用できる

カテゴリー: Tips タグ: , , パーマリンク