Java でアプリイベントをロギングする

Java 用の Bookshelf のチュートリアルのこのパートでは、アプリに詳細なロギングを組み込んで、潜在的な問題の検出、デバッグ、モニタリングを行いやすくする方法について説明します。

このページは複数ページからなるチュートリアルの一部です。最初からセットアップ手順を確認するには、Java Bookshelf アプリに移動してください。

ローカルマシンでのアプリの実行

アプリをローカルで実行するには:

  1. getting-started-java/bookshelf-standard/5-logging ディレクトリで、次のコマンドを入力し、ローカル ウェブサーバーを起動します。

    mvn package appengine:run -Dbookshelf.bucket=[YOUR-BUCKET]
    [YOUR_BUCKET] は、使用するバケット名に置き換えてください。
  2. ウェブブラウザで http://localhost:8080 にアクセスします。

App Engine スタンダード環境へのアプリのデプロイ

アプリを App Engine スタンダード環境にデプロイするには:

  1. Bookshelf アプリにアップロードされる Datastore インデックスを作成するには、少なくとも 1 つの書籍を作成して、[My Books] をクリックします。clean コマンドを使用してアプリをビルドすると、そのローカル インデックスが削除されます。したがって、デプロイするアプリのビルドでは必ずこの作業を行ってください。
  2. getting-started-java/bookshelf-standard/5-logging ディレクトリで、次のコマンドを入力してアプリをデプロイします。
  3. mvn appengine:deploy -Dappengine.appId=[YOUR-PROJECT-ID] -Dappengine.version=[YOUR-VERSION] -Dbookshelf.bucket=[YOUR-BUCKET].appspot.com
    [YOUR-PROJECT-ID] は実際のプロジェクト ID に、[YOUR-VERSION] は実際のバージョン(12 などの文字列値)に置き換えます。
  4. ウェブブラウザに次のアドレスを入力します。

    https://PROJECT_ID.REGION_ID.r.appspot.com

    以下を置き換えます。

アプリを更新した後は、アプリを最初にデプロイしたときと同じコマンドに、同じプロジェクト ID とバージョンを指定することで、更新されたバージョンを再デプロイできます。これにより、現在デプロイされているアプリが上書きされます。更新時のコマンドラインで別のバージョン文字列を指定すると、新しいデプロイによってアプリの新しいバージョンが作成され、それが現行の提供バージョンとして採用されます。

アプリの提供バージョン以外のバージョンを削除することで、コストを削減できます。

アプリのバージョンを削除するには:

  1. Cloud Console で、App Engine の [バージョン] ページに移動します。

    [バージョン] ページに移動

  2. デフォルト以外で削除するアプリのバージョンのチェックボックスをオンにします。
  3. [削除] をクリックして、アプリのバージョンを削除します。

課金対象のリソースをクリーンアップする方法の詳細については、このチュートリアルの最後のステップにあるクリーンアップ セクションをご覧ください。

ログの表示

Bookshelf アプリが実行されると、収集したログデータが書き込まれ、Cloud Console で利用できるようになります。Cloud Console のログ モニタリング ツールを使用すると、ログを直接分析できます。さらに詳細な分析が必要な場合は、Cloud Console を使用して、アプリのログを BigQuery にストリーミングまたはインポートするか、Cloud Storage バケットにエクスポートします。

Cloud Console でのロギング

アプリの構造

次の図は、アプリを App Engine スタンダード環境にデプロイした場合のロギングの処理を表しています。

ログサンプルの構造 - App Engine スタンダード環境

コードの説明

App Engine スタンダード環境と互換性のある Java ロギング パッケージは多数あります。このサンプルでは、最もわかりやすい java.util.logging を使用します。各クラスは、次のように、Logger のインスタンス化が必要です。

private final Logger logger = Logger.getLogger(ReadBookServlet.class.getName());

log メソッドは、Level 値と 1 つの文字列を受け入れます(詳細については、Java の Levelをご覧ください)。Level に指定できる値は次のとおりです。

あるいは configinfowarningsevere のいずれかのショートカット メソッドを使ってログを記録することもできます。

logger.log(Level.INFO, "Read book with id {0}", id);

ロギングレベルは、多くの場合プロパティ ファイルから設定されますが、logging.properties で設定や変更することも可能です。

# A default java.util.logging configuration.
# (All App Engine logging is through java.util.logging by default).

# Set the default logging level for all loggers to INFO
.level = INFO
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=FINEST
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format = [%1$tc] %4$s: %2$s - %5$s %6$s%n

ロギング構成について

サンプルアプリを App Engine スタンダード環境で実行すると、アプリのログは Cloud Logging によって自動的に収集され、Cloud Console のログビューアで表示、検索、エクスポートできるようになります。

このサンプルでは、すべてのログは stderrstdout に書き込まれます。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

プロジェクトの削除

課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

アプリのデフォルト以外のバージョンの削除

プロジェクトを削除しない場合、アプリのデフォルト以外のバージョンを削除すると、コストを抑えることができます。

アプリのバージョンを削除するには:

  1. Cloud Console で、App Engine の [バージョン] ページに移動します。

    [バージョン] ページに移動

  2. デフォルト以外で削除するアプリのバージョンのチェックボックスをオンにします。
  3. [削除] をクリックして、アプリのバージョンを削除します。

Cloud Storage バケットの削除

Cloud Storage バケットを削除するには:

  1. Cloud Console で、[Cloud Storage ブラウザ] ページに移動します。

    Cloud Storage ブラウザページに移動

  2. 削除するバケットのチェックボックスをクリックします。
  3. [削除] をクリックして、バケットを削除します。

次のステップ