Overview
このガイドでは、 Kotlin Syncドライバーでロガーを設定および構成する方法を学習できます。
このガイドでは、ドライバーでイベントをレコード方法について説明しています。コード内でドライバーのアクティビティに関する情報を使用する方法については、アプリケーション イベントの監視 のガイドを参照してください。
ロガーを設定する
Kotlin Syncドライバーは、Simple Logging Facade For Java (SLF4J)を使用して、選択したロギングフレームワークを指定できます。SLF4J の詳細については、SLF4J のドキュメントを参照してください。
ロガーの設定はオプションです。ロガーを設定するには、プロジェクトに以下を含める必要があります。
クラスパス内の
slf4j-api
アーティファクトロギング フレームワーク
slf4j-api
アーティファクトをロギングフレームワークに接続するバインディング
ドライバーがクラスパス内で slf4j-api
アーティファクトを見つけられない場合、ドライバーは次の警告を出力し、それ以降のすべてのログ記録を無効にします。
WARNING: SLF4J not found on the classpath. Logging is disabled for the 'org.mongodb.driver' component
ロガー設定の例
次の例は、ロガーを設定する方法を示しています。対応する構文を確認するには、Logback タブまたは Log4j2タブを選択します。
プロジェクトの依存関係管理ツールを使用して Logback を設定する方法については、Maven タブまたは Gradleタブを選択してください。
次の依存関係を 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 インスタンスに接続し、次のコードでドキュメントを取得します。
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
上記のコードでは、次のようなメッセージが出力されます。
... 12:14:55.833 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname> 12:14:55.834 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3 12:14:55.836 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=4 ms 12:14:55.843 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=9 ms
注意
デフォルトのログレベル
Logback のデフォルトのログレベルは DEBUG です。Logback ロガーのログレベルを変更する方法については、 このページの「ログ レベルの構成」セクション を参照してください。
プロジェクトの依存関係管理ツールで Log4j2 を設定する方法については、Maven タブまたは Gradleタブを選択してください。
次の依存関係を 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; ... val logger = LoggerFactory.getLogger("MyApp"); logger.error("Logging an Error");
上記のコードでは、次のようなメッセージが出力されます。
12:35:00.438 [main] ERROR <my package path> - Logging an Error
注意
デフォルトのログレベル
Log4J2 のデフォルトのログレベルは ERROR です。つまり、 Kotlin Syncドライバーで標準操作を実行中、未構成の場合 Log4J2 からの出力は生成されません。Log4J2 ロガーのログレベルを変更する方法については、 このページのログ レベルの構成セクション を参照してください。
ログレベルの構成
ロガーのログレベルは、SLF4J にバインドされたロギングフレームワークの構成システムを使用して構成できます。ログレベルは、ロガーがメッセージを出力するのに必要なメッセージの緊急度の下限を指定します。
ロガー構成例
次の例では、ログレベルを INFO
に設定しています。対応する構文を確認するには、Logback タブまたは Log4j2タブを選択します。
logback.xml
という名前のファイルに Logback 構成を指定します。クラスパスからこのファイルにアクセスできる必要があります。
Logbackフレームワークでは、最も緊急度の順に次のログレベルが定義されます。
ERROR
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>
ロガーが正常に構成されたかテストするには、次のコードを実行します。
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
このコードでは、次のような出力が生成されます。
... 317 [main] INFO org.mongodb.driver.client - MongoClient with metadata {"driver": {"name": "<driver-name>", "version": "<driver-version>"}, "os": {"type": "<os-type>", "name": "<os-name>", "architecture": "<architecture>", "version": "<os-version>"}, "platform": "<platform-info>"} created with settings <MongoClientSettings> 345 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=<MongoDB hostname>, type=<server-type>, cryptd=false, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=<max-wire-version>, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=<round-trip-nanos>, minRoundTripTimeNanos=<min-round-trip-nanos}
log4j2.xml
という名前のファイルに Log4j2 の構成を指定します。クラスパスからこのファイルにアクセスできる必要があります。
Log4j2フレームワークでは、緊急度の順に次のログレベルが定義されます。
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
ALL
log4j2.xml
ファイルを次のように設定します。
<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>
ロガーが正常に構成されたかテストするには、次のコードを実行します。
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
このコードでは、次のような出力が生成されます。
... 21:19:25.696 [main] INFO org.mongodb.driver.client - MongoClient with metadata {"driver": {"name": "<driver-name>", "version": "<driver-version>"}, "os": {"type": "<os-type>", "name": "<os-name>", "architecture": "<architecture>", "version": "<os-version>"}, "platform": "<platform-info>"} created with settings <MongoClientSettings> 21:19:25.710 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=<MongoDB hostname>, type=<server-type>, cryptd=false, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=<max-wire-version>, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=<round-trip-nanos>, minRoundTripTimeNanos=<min-round-trip-nanos}
ロガー名
ロガーは、さまざまなログ イベントを整理するためにロガー名を使用します。ロガー名は階層を形成する string です。ロガーの名前の後に続く "."
が他のロガーの名前のプレフィックスである場合、そのロガーは他のロガーの祖先です。例、"grandparent"
は "grandparent.parent"
の祖先であり、これは "grandparent.parent.child"
の祖先です。ロガーは祖先のロガーのプロパティを継承し、独自のプロパティを定義することもできます。
Kotlin Syncドライバーは、さまざまなログ イベントを整理するために、次のロガー名を定義します。
ロガー名 | 説明 |
---|---|
| 認証イベントをログに記録 |
| MongoClient インスタンスに関連するイベントをログに記録 |
| MongoDB配置のモニタリングに関連するイベントをログに記録 |
| 接続と接続プールをログに記録 |
| TLS イベントをログに記録 |
| 自動再試行に関連するログ記録を含む操作のログ |
| MongoDB配置に送信されたコマンドとそこから受信された応答をログに記録 |
| 接続文字列の解析イベントをログに記録 |
| Java管理拡張機能(JTX) イベントをログに記録 |
ロガー名の例
次の例では、ルート ロガーを無効にし、org.mongodb.driver.connection
ロガーのログレベルを DEBUG
に設定します。これにより、ドライバーは DEBUG
レベル以上の接続と接続プールに関連するメッセージのみをログに記録するようになります。対応する構文を確認するには、Logback タブまたは Log4j2タブを選択します。
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="DEBUG" additivity="true"/> <root level="OFF"> <appender-ref ref="CONSOLE" /> </root> </configuration>
ロガーが正常に構成されたかテストするには、次のコードを実行します。
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
このコードでは、次のような出力が生成されます。
... 255 [main] DEBUG org.mongodb.driver.connection - Connection pool created for <MongoDB hostname> using options <connection-pool-options> 301 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] DEBUG org.mongodb.driver.connection - Connection pool ready for <MongoDB hostname> 321 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname> 323 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3 335 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=<connect-duration> ms 336 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=<checkout-duration> ms 363 [main] DEBUG org.mongodb.driver.connection - Connection checked in: address=<MongoDB hostname>, driver-generated ID=3
log4j2.xml
ファイルを次のように設定します。
<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="DEBUG"/> <Root level="OFF"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
ロガーが正常に構成されたかテストするには、次のコードを実行します。
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
このコードでは、次のような出力が生成されます。
... 21:27:17.035 [main] DEBUG org.mongodb.driver.connection - Connection pool created for <MongoDB hostname> using options <connection-pool-options> 21:27:17.058 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] DEBUG org.mongodb.driver.connection - Connection pool ready for <MongoDB hostname> 21:27:17.064 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname> 21:27:17.069 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3 21:27:17.075 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=<connect-duration> ms 21:27:17.075 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=<checkout-duration> ms 21:27:17.086 [main] DEBUG org.mongodb.driver.connection - Connection checked in: address=<MongoDB hostname>, driver-generated ID=3
詳細情報
MongoDB のログ機能の詳細については、 MongoDB Serverマニュアルの「 ログ メッセージ 」を参照してください。
このガイドで説明したロギング フレームワークの詳細については、次の外部ドキュメントを参照してください。