Docs Menu
Docs Home
/ / /
Java Sync Driver
/

ログ記録

項目一覧

  • Overview
  • ロガーを設定する
  • バックグラウンド
  • 例 - 設定する
  • ロガーを構成する
  • 例 - 構成する
  • ロガー名
  • 例 - 名前

このガイドでは、MongoDB Java ドライバーでロガーを設定および構成する方法を学習できます。

次の方法を学習します:

  • Simple Logging Facade For Java(SLF4J)を使用してロガーを設定する

  • ロガーのログレベルを構成する

このガイドでは、ドライバーでイベントを記録する方法について説明しています。 コード内でドライバーのアクティビティに関する情報を使用する方法について学習したい場合は、監視に関するガイドをお読みください。

このセクションでは、ロガーを設定するために必要な依存関係の背景を説明し、ロガーの設定例を示します。

MongoDB Javaドライバーは、Simple Logging Facade For Java (SLF4 J)を使用します。 SLF4 J を使用して、配置時に選択したロギングフレームワークを指定できます。 SLF4 J、 の詳細については、 SLF4 J のドキュメントを参照してください。

ロガーの設定はオプションです。アプリケーションを起動すると、MongoDB Java ドライバーはクラスパス内の slf4j-api アーティファクトを検索します。ドライバーが slf4j-api アーティファクトを見つけられない場合、ドライバーは java.util.logging で次の警告をログに記録し、それ以降のすべてのログ記録を無効にします。

WARNING: SLF4J not found on the classpath. Logging is disabled for the 'org.mongodb.driver' component

ロガーを設定するには、プロジェクトに以下を含める必要があります。

  • slf4j-apiアーティファクト

  • ロギング フレームワーク

  • バインディング

注意

最も一般的なロギング フレームワークでは、多くの場合、slf4j-api とロギング フレームワークを依存関係としてリストする単一のバインディング アーティファクトが存在します。つまり、プロジェクトの依存関係リストに 1 つのアーティファクトを追加することでロガーを設定できます。以下の例でこれを確認できます。

バインディングは、slf4j-api アーティファクトをロギング フレームワークに接続するコードです。次の例は、slf4j-api アーティファクトを 2 つの最も一般的なログ記録フレームワークである Log4j2 と Logback にバインドする方法を示しています。

この例では、ロガーを設定する方法を示します。プロジェクトで使用するログ記録フレームワークに対応するタブをクリックします。

Tip

依存関係バージョン

以下にリストされているバージョンは、真実のソースではなく、説明のためのものです。最新バージョン情報が保証されているかどうかについては、SLF4J および選択したログ記録フレームワークの公式ドキュメントを確認してください。

プロジェクトに使用しているビルド ツールを選択します。

次の依存関係を pom.xml ファイルに追加します。

<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
</dependencies>

次の依存関係を build.gradle ファイルに追加します。

dependencies {
implementation 'ch.qos.logback:logback-classic:1.2.11'
}

前述の依存関係を追加したら、MongoDB インスタンスに接続し、次のコードでドキュメントを取得します。

MongoClient mongoClient = MongoClients.create(<connection uri>);
MongoDatabase database = mongoClient.getDatabase(<database>);
MongoCollection<Document> collection = database.getCollection(<collection>);
collection.find().first();

次のような出力が表示されます。

...
12:14:55.853 [main] DEBUG org.mongodb.driver.connection - Opened connection [connectionId{localValue:3, serverValue:3}] to <MongoDB hostname>
12:14:55.861 [main] DEBUG org.mongodb.driver.protocol.command - Command "find" started on database <database> using a connection with driver-generated ID 3 and server-generated ID 3 to <MongoDB hostname>. The request ID is 5. Command: {"find": "<collection>", "filter": {}, "limit": 1, "singleBatch": true, "$db": "<database>", "lsid": {"id": {"$binary": {"base64": "<_id>", "subType": "04"}}}, "$readPreference": {"mode": "primaryPreferred"}}
12:14:55.864 [main] DEBUG org.mongodb.driver.protocol.command - Command "find" succeeded in 4.34 ms using a connection with driver-generated ID 3 and server-generated ID 3 to <MongoDB hostname. The request ID is 5. Command reply: {"cursor": {"id": 0, "ns": "<database>.<collection>", "firstBatch": []}, "ok": 1.0, "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1673778535, "i": 1}}, "signature": {"hash": {"$binary": {"base64": "<_id>", "subType": "00"}}, "keyId": 0}}, "operationTime": {"$timestamp": {"t": 1673778535, "i": 1}}}

注意

デフォルトのログレベル

Logback のデフォルトのログ レベルは DEBUG です。Logback ロガーのログ レベルを変更する方法については、このページの「ロガーの構成」セクションの例を参照してください。

Logback の詳細については、 Logback マニュアルを参照してください。

プロジェクトに使用しているビルド ツールを選択します。

次の依存関係を pom.xml ファイルに追加します。

<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
</dependency>
</dependencies>

次の依存関係を build.gradle ファイルに追加します。

dependencies {
implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1'
}

前述の依存関係を含めたら、次のコードを使用してエラーをログに記録します。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
Logger logger = LoggerFactory.getLogger("MyApp");
logger.error("Logging an Error");

次のような出力が表示されます。

12:35:00.438 [main] ERROR <my package path> - Logging an Error

注意

デフォルトのログレベル

Log4J2 のデフォルトのログ レベルは ERROR です。つまり、MongoDB Java ドライバーで標準操作を実行しても、未構成の場合 Log4J2 から出力は生成されません。Log4J2 ロガーのログ レベルを変更する方法については、このページの「ロガーの構成」セクションの例を参照してください。

Log4j2 について詳しくは、Log4j2 のマニュアルを参照してください。

ロガーを構成するには、SLF4J にバインドされたロギング フレームワークの構成システムを使用する必要があります。

次の例では、ロギング フレームワークの構成システムを使用してロガーの ログ レベル を設定する方法を示します。

ロガーのログ レベルは、ロガーがメッセージを出力するのに必要なメッセージの緊急度の下限を指定します。

この例では、ロガーのログ レベルを INFO に設定する方法を示します。プロジェクトで使用しているログ記録フレームワークに対応するタブを選択します。

logback.xml という名前のファイルに Logback の構成を指定します。logback.xml ファイルはクラスパスからアクセスできれば、特定の場所に作成する必要はありません。

Logback フレームワークでは、次のログ レベルが定義されます。以下は、ログ レベルを緊急度の順に降順に並べたリストです。

  • エラー

  • WARN

  • INFO

  • DEBUG

  • TRACE

logback.xml ファイルを次のように設定します。

<configuration>
<appender name="CONSOLE"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger{30} - %msg%n
</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>

ロガーが正常に構成されたかテストするには、次のコードを実行します。

MongoClient mongoClient = MongoClients.create(<connection uri>);
MongoDatabase database = mongoClient.getDatabase(<database>);
MongoCollection<Document> collection = database.getCollection(<collection>);
collection.find().first();

次のような出力が表示されます。

...
1317 [cluster-ClusterId{value='<your cluster id>', description='null'}-<your connection uri>] INFO org.mongodb.driver.cluster - Discovered replica set primary <your connection uri>
1568 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:7, serverValue:<server value>}] to <your connection uri>

configuring Logback について詳しくは、Logback のマニュアルを参照してください。

log4j2.xml という名前のファイルに Log4j2の構成を指定します。log4j2.xml ファイルはクラスパスからアクセスできれば、特定の場所に作成する必要はありません。

Log4j2 フレームワークで定義されているログ レベルは、次の通りです。以下は、ログ レベルを緊急度の順に降順に並べたリストです。

  • 致命的

  • エラー

  • WARN

  • INFO

  • DEBUG

  • TRACE

  • すべて

log4j2.xml ファイルを次のように設定します。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

ロガーが正常に構成されたかテストするには、次のコードを実行します。

MongoClient mongoClient = MongoClients.create(<connection uri>);
MongoDatabase database = mongoClient.getDatabase(<database>);
MongoCollection<Document> collection = database.getCollection(<collection>);
collection.find().first();

次のような出力が表示されます。

...
10:14:57.633 [cluster-ClusterId{value=<your cluster id>, description='null'}-<your connection uri>] INFO org.mongodb.driver.cluster - Discovered replica set primary <your connection uri>
10:14:57.790 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:7, serverValue:<your server value>}] to <your connection uri>

Log4j2 の構成について詳しくは、公式の Log4j2 configuration guide を参照してください。

ロガーは、さまざまなログ イベントを整理するためにロガー名を使用します。ロガー名は階層を形成する文字列です。ロガーの名前の後に続く "." が他のロガーの名前のプレフィックスである場合、そのロガーは他のロガーの祖先です。たとえば、"grandparent""grandparent.parent" の祖先であり、これは "grandparent.parent.child" の祖先です。

具体的な例として、コード内のロガー階層は次のようになります。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
Logger logger_parent = LoggerFactory.getLogger("parent");
Logger logger_child = LoggerFactory.getLogger("parent.child");

ロガーは祖先のロガーのプロパティを継承し、独自のロガーを定義することができます。これは、Java のクラス継承に似ていると考えることができます。

MongoDB Java ドライバーは、ドライバー内のさまざまなログ イベントを整理するために、次のロガー名を定義します。以下は、ドライバーで定義されているロガー名と、それに対応するログ イベントです。

  • org.mongodb.driver.authenticator : 認証

  • org.mongodb.driver.client : MongoClient インスタンスに関連するイベント

  • org.mongodb.driver.cluster : MongoDB 配置のモニタリング

  • org.mongodb.driver.connection : 接続と接続プール

  • org.mongodb.driver.connection.tls : TLS/SSL

  • org.mongodb.driver.operation : 自動再試行に関連するログ記録を含む操作

  • org.mongodb.driver.protocol : MongoDB配置に送信されたコマンドとそこから受信された応答

  • org.mongodb.driver.uri : 接続文字列の解析

  • org.mongodb.driver.management : JMX(Java Management Extensions)

この例では、特定のドライバー ロガーのログ レベルを変更する方法を説明しています。ルート ロガーを OFF に設定し、 org.mongodb.driver.connection ロガーを INFO に設定します。これにより、アプリケーションは MongoDB インスタンスへの接続に関連するメッセージのみをログに記録するようになります。

プロジェクトで使用しているログ記録フレームワークに対応するタブを選択します。

logback.xml ファイルを次のように設定します。

<configuration>
<appender name="CONSOLE"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger{30} - %msg%n
</pattern>
</encoder>
</appender>
<logger name="org.mongodb.driver.connection" level="INFO" additivity="true"/>
<root level="OFF">
<appender-ref ref="CONSOLE" />
</root>
</configuration>

ロガーが正常に構成されたかテストするには、次のコードを実行します。

MongoClient mongoClient = MongoClients.create(<connection uri>);
MongoDatabase database = mongoClient.getDatabase(<database>);
MongoCollection<Document> collection = database.getCollection(<collection>);
collection.find().first();

次のような出力が表示されます。

...
829 [cluster-rtt-ClusterId{value='<some value>', description='null'}-<your connection URI>] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:2, serverValue:<your server value>}] to <your connection uri>
977 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:7, serverValue:<your server value>}] to <your connection uri>

Logback の設定について詳しくは、公式 Logback 構成ガイドを参照してください。

log4j2.xml ファイルを次のように設定します。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.mongodb.driver.connection" level="INFO"/>
<Root level="OFF">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

ロガーが正常に構成されたかテストするには、次のコードを実行します。

MongoClient mongoClient = MongoClients.create(<connection uri>);
MongoDatabase database = mongoClient.getDatabase(<database>);
MongoCollection<Document> collection = database.getCollection(<collection>);
collection.find().first();

次のような出力が表示されます。

...
15:40:23.005 [cluster-ClusterId{value='<some value>', description='null'}-<your connection uri>] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:3, serverValue:<your server value>}] to <your connection uri>
15:40:23.159 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:7, serverValue:<your server value>}] to <your connection uri>

Log4j2 の構成について詳しくは、公式の Log4j2 configuration guide を参照してください。

戻る

照合