Java アプリケーションから Cloud Logging にログを書き込むには、Logback アペンダーまたは java.util.logging handlerを使用するか、Java 用 Cloud Logging ライブラリを直接使用します。
Java 用 Cloud Logging ライブラリを使用するために、Cloud Logging エージェントをインストールする必要はありません。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Logging API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Logging API.
Cloud Logging 用 Logback アペンダー
Logback アペンダーを使用すると、Cloud Logging を SLF4J ロギング ファサードで使用できます。
依存関係のインストール
If you are using Maven, add
the following to your pom.xml
file. For more information about
BOMs, see The Google Cloud Platform Libraries BOM.
If you are using Gradle, add the following to your dependencies:
If you are using sbt, add the following to your dependencies:
Logback の構成
Logback は、プログラムで設定することも、XML または Groovy 形式のスクリプトを使用して設定することもできます。
重大度の最小しきい値やログ名をカスタマイズすることも、機能強化を行うこともできます。これは、XML 形式の Logback 構成のサンプルです。
例
Cloud Logging の Logback アペンダーを使用するように Logback を構成すると、SLF4J のロギング API を使用してログをリダイレクトできるようになります。サンプルをローカルまたは Google Cloud の外部で実行する場合は、Google Cloud の構成を指定します。次のスニペットは、アプリケーション内で SLF4J ファサードを使用してロギングを行う方法を示しています。
java.util.logging ハンドラ
デフォルトの Java Logging API ハンドラから Cloud Logging API を使用することもできます。依存関係のインストール
If you are using Maven with
a BOM, add the following to your pom.xml
file:
If you are using Maven without a BOM, add this to your dependencies:
If you are using Gradle, add the following to your dependencies:
If you are using sbt, add the following to your dependencies:
If you're using Visual Studio Code, IntelliJ, or Eclipse, you can add client libraries to your project using the following IDE plugins:
The plugins provide additional functionality, such as key management for service accounts. Refer to each plugin's documentation for details.
java.util.logging の構成
logging ハンドラは、プログラムで追加することも、構成ファイルを使用して追加することもできます。構成ファイルのパスは、システム プロパティとしてアプリケーションに渡す必要があります。-Djava.util.logging.config.file=/path/to/logging.properties
次に構成ファイルの例を示します。
例
サンプルをローカルまたは Google Cloud の外部で実行する場合は、Google Cloud の構成を指定します。次のスニペットでは、java.util.logging
を使用してログを記録する方法を示しています。
共通構成
以降のセクションでは、java.util.logging
ハンドラと Cloud Logging 用 Logback アペンダーに共通する構成について説明します。
デフォルト
Logback アペンダーと java.util.logging
handler では、次のデフォルトを使用して Cloud Logging クライアントをインスタンス化します。
ログ名:
java.log
ロギングの最小しきい値:
INFO
フラッシュ重大度:
ERROR
Java 用 Cloud Logging ライブラリは、サイズと最終書き込みからの経過時間に基づいてメッセージをバッチ処理します。フラッシュ重大度以上のロギング リクエストを含むバッチは、すぐに書き出されます。
モニタリング対象リソースの検出
Cloud Logging ライブラリから送信されるすべてのログでは、アプリケーションを特定するためにモニタリング対象リソースのタイプを必要とします。
Logback アペンダーと java.util.logging
ハンドラは、App Engine、Compute Engine、Google Kubernetes Engine のアプリケーションのリソースタイプを自動的に検出します。
他の環境では、global
モニタリング対象リソースがデフォルトで使用されます。
Logback アペンダーの構成または java.util.logging
ハンドラの構成で、モニタリング対象のリソースタイプを有効なタイプにオーバーライドできます。
追加のフィールドとラベル
Logback アペンダーと java.util.logging
ハンドラでは、LoggingEnhancer のインスタンスを使用して、LogEntry オブジェクトにフィールドを追加する、または既存のフィールドを更新できます。
エンハンサーは、Logback アペンダーの構成または java.util.logging
ハンドラの構成に示されるように構成する必要があります。
構成に際して、カスタムラベルの使用がサポートされていない場合があります。たとえば、Dataflow ログにこれらのラベルは含まれません。
インストールの詳細については、Java 用 Cloud Logging ライブラリのドキュメントをご覧ください。公開バグトラッカーを使用して問題を報告することもできます。
Cloud Logging クライアント ライブラリを使用してログを書き込む
Java 用 Cloud Logging クライアント ライブラリを直接使用する方法については、Cloud Logging クライアント ライブラリをご覧ください。
Google Cloud での実行
Java 用 Cloud Logging ライブラリを使用してログを書き込むアプリでは、基盤となるリソースのサービス アカウントにログ書き込み(roles/logging.logWriter
) IAMのロールが必要です。
ほとんどの Google Cloud 環境では、このロールを持つようにデフォルトのサービス アカウントが自動的に構成されます。
App Engine
App Engine では Cloud Logging が自動的に有効になり、アプリのデフォルトのサービス アカウントにログエントリを書き込む IAM 権限がデフォルトで付与されます。
App Engine スタンダード環境では、デフォルトで java.util.logging.Logger
API を使用します。これは Cloud Logging に直接書き込みを行うため、簡単に構成できます。
詳しくは、App Engine のドキュメントでアプリケーション ログの読み込みと書き込みに関する説明をご覧ください。
App Engine フレキシブル環境
App Engine フレキシブル環境では、java.util.logging
は、デフォルトで ConsoleHandler
を使用し、stdout
と stderr
にログを送信します。
Jetty ランタイムは、Java 用 Cloud Logging ライブラリにバンドルされています。
java.util.logging
ハンドラを使用すると、次のように app.yaml
で logging.properties
を指定することで、Cloud Logging に直接ログを書き込めます。
env_variables:
JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties
java.util.logging
ハンドラまたは Logback アペンダーを使用すると、Jetty ランタイムで Trace ID ロギングが使用できます。
App Engine フレキシブル環境で実行すると、TraceLoggingEnhancer インスタンスがラベル trace_id
を使用してスレッドセーフのトレース ID を各ログエントリに追加します。
Google Kubernetes Engine(GKE)
GKE は、デフォルトのサービス アカウントにログ書き込み(roles/logging.logWriter
) IAM ロールを自動的に付与します。このデフォルトのサービス アカウントで Workload Identity を使用して、ワークロードが特定の Google Cloud API にアクセスできるようにする場合、追加の構成は必要ありません。ただし、カスタム IAM サービス アカウントで Workload Identity を使用する場合は、カスタム サービス アカウントにログ書き込みロール(roles/logging.logWriter
)があることを確認してください。
必要に応じて、クラスタの作成時に次のコマンドを使用して logging.write
アクセス スコープを追加することもできます。
gcloud container clusters create example-cluster-name \
--scopes https://www.googleapis.com/auth/logging.write
Compute Engine
Compute Engine VM インスタンスを使用する場合は、各インスタンスに cloud-platform
アクセス スコープを追加します。Google Cloud Console から新しいインスタンスを作成する場合は、[インスタンスの作成] パネルの [ID と API へのアクセス] のセクションで作成します。Compute Engine のデフォルト サービス アカウントまたは別のサービス アカウントを使用し、[ID と API へのアクセス] セクションの [すべての Cloud API に完全アクセス権を許可] を選択します。どのサービス アカウントを選択する場合でも、Google Cloud コンソールの [IAM と管理] でログ書き込みロールが付与されていることを確認してください。
ローカルやその他の場所で実行する
自分のワークステーション、データセンターのコンピュータ、別のクラウド プロバイダの VM インスタンスでライブラリを実行するなど、Google Cloud の外部で Java 用 Cloud Logging ライブラリを使用するには、Google Cloud プロジェクト ID と適切なサービス アカウント認証情報を Java 用 Cloud Logging ライブラリに直接提供する必要があります。
既存のサービス アカウントの場合は、次の操作を行います。
サービス アカウントに IAM のログ書き込み(
roles/logging.logWriter
) IAM。ロールを付与します。IAM ロールの詳細については、アクセス制御をご覧ください。
サービス アカウントをお持ちでない場合は、サービス アカウントを作成します。このプロセスについては、サービス アカウントの作成をご覧ください。
認証に使用できる方法に関する一般的な情報については、用語: サービス アカウントをご覧ください。
ログを確認する
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Logging] である結果を選択します。
ログ エクスプローラでは 1 つ以上のリソースを指定する必要がありますが、リソースの選択が明確でない場合があります。その場合は、次のヒントを参考にしてください。
アプリケーションを App Engine にデプロイしている場合や、App Engine 固有のライブラリを使用している場合は、リソースを GAE アプリケーションに設定します。
アプリケーションを Compute Engine にデプロイしている場合は、リソースを GCE VM インスタンスに設定します。
アプリケーションを Google Kubernetes Engine にデプロイしている場合は、クラスタのロギング構成に応じてログエントリのリソースタイプが異なります。レガシー Google Cloud Observability と Google Cloud Observability Kubernetes Monitoring ソリューションに関する詳細な論議、およびどのようにこれらのオプションがリソースタイプに影響を与えるかについては、Google Cloud Observability Kubernetes Monitoring をご覧ください。
アプリケーションが Cloud Logging API を直接使用している場合、リソースは API と構成に依存します。たとえば、アプリケーションでリソースを指定することも、デフォルトのリソースを使用することもできます。
ログ エクスプローラにログが表示されない場合に、すべてのログエントリを表示するには、高度なクエリモードに切り替えて空のクエリを使用します。
- 高度なクエリモードに切り替えるには、ログ エクスプローラの上部にあるメニュー(▾)をクリックし、[高度なフィルタに変換] を選択します。
- フィルタ ボックスに表示されているコンテンツをクリアします。
- [フィルタを送信] をクリックします。
個々のエントリを調べてリソースを特定します。
詳細については、ログ エクスプローラの使用をご覧ください。