Overview
このガイドでは、 MongoDB Scalaドライバーでロガーを設定および構成する方法を学習できます。
このガイドでは、ドライバーでイベントをレコード方法について説明しています。コード内でドライバーのアクティビティに関する情報を使用する方法については、「 監視ガイド 」を参照してください。
ロガーを設定する
このセクションでは、ロガーを設定するために必要な依存関係について説明し、ロガーの設定例を示します。
バックグラウンド
MongoDB Scalaドライバーは、Simple Logging Facade For Java (SLF4J)を使用します。 SLF4J を使用する場合、配置時にロギングフレームワークを指定できます。 Scalaドライバーではロガーの設定は任意です。
アプリケーションを起動すると、 MongoDB Scalaドライバーはクラスパス内の slf4j-api アーティファクトを検索します。ドライバーが slf4j-api アーティファクトを見つけられない場合は、次の警告がログに記録され、それ以降のすべてのログ記録は無効になります。
WARNING: SLF4J not found on the classpath. Logging is disabled for the 'org.mongodb.driver' component
ロガーを設定するには、プロジェクトに次のコンポーネントを含める必要があります。
slf4j-apiアーティファクトロギング フレームワーク
バインディング(
slf4j-apiアーティファクトをロギングフレームワークに接続するもの)
次の例は、 slf4j-api アーティファクトを選択した ロギングフレームワークにバインドする方法を示しています。
ロガーの例
LogbackLog4j2[ タブを選択して、選択したログ記録フレームワークを設定し、対応するコード例を表示します。
Logback を使用するには、プロジェクトの build.sbtファイルに次の行を追加します。これらの行には、slf4j-api アーティファクト、 ロギングフレームワーク、および バインディングが含まれます。
libraryDependencies += "org.slf4j" % "slf4j-api" % "2.0.13" libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.5.6"
Logback の設定をテストするには、次のコードをプロジェクトの Main.scalaファイルに追加します。このコードはMongoDBデプロイに接続し、ドキュメントを検索します。コードを追加したら、sbt run を使用して IDE ではなくターミナルでアプリケーションを実行します。
val mongoClient = MongoClient("<connection string>") val database: MongoDatabase = mongoClient.getDatabase("<database>") val collection: MongoCollection[Document] = database.getCollection("<collection>") collection.find().first().printHeadResult()
... 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 の詳細については、Logback マニュアルを参照してください。
Log4j2 を使用するには、プロジェクトの build.sbtファイルに次の行を追加します。これらの行には、slf4j-api アーティファクト、 ロギングフレームワーク、および バインディングが含まれます。
libraryDependencies += "org.slf4j" % "slf4j-api" % "2.0.13" libraryDependencies += "org.apache.logging.log4j" % "log4j-slf4j2-impl" % "2.24.3" libraryDependencies += "org.apache.logging.log4j" % "log4j-core" % "2.24.3"
Log4j2 の設定をテストするには、次のコードをプロジェクトの Main.scalaファイルに追加します。コードはエラー メッセージをログに記録します。コードを追加したら、sbt run を使用して IDE ではなくターミナルでアプリケーションを実行します。
import org.slf4j.Logger import org.slf4j.LoggerFactory val logger: Logger = LoggerFactory.getLogger("MyApp") logger.error("Logging an Error")
12:35:00.438 [main] ERROR <my package path> - Logging an Error
注意
デフォルトのログレベル
Log4 j2 の詳細については、 Log4 j2 マニュアルを参照してください。
SLF4 J の詳細については、 SLF4 J のドキュメントを参照してください。
ロガーを構成する
ロガーを構成するには、SLF4J にバインドしたロギングフレームワークの構成システムを使用する必要があります。
構成例
ログレベルは、ロガーがメッセージを出力するのに必要なメッセージの緊急度を指定します。次の例は、各ロギング フレームワークの構成システムを使用してログレベルを INFO に設定する方法を示しています。各アプローチに対応するコードを表示するには、Logback Log4j2タブまたは タブを選択します。
Logback は、クラスパス上の logback.xml という名前のファイルから構成を読み取ります。このファイルはデフォルトでは存在しない ため、作成する必要があります。 logback.xml は、クラスパスからアクセスできる限り、 Scalaプロジェクトのどこにでも配置できます。
Logbackフレームワークでは、緊急度が最も高い順にリストされた次のログレベルが定義されています。
エラー
WARN
INFO
DEBUG
TRACE
各ログレベルの意味の詳細については、 Logback ドキュメントの 有効レベル を参照してください。
次のコードを 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>
ロガーが正常に構成されたかテストするには、IDE ではなく sbt run コマンドを使用して次のコードを実行します。
val mongoClient = MongoClient("<connection string>") val database: MongoDatabase = mongoClient.getDatabase("<database>") val collection: MongoCollection[Document] = database.getCollection("<collection>") collection.find().first().printHeadResult()
... 1317 [cluster-<your cluster id>-<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 は、クラスパス上の log4j2.xml という名前のファイルから構成を読み取ります。このファイルはデフォルトでは存在しない ため、作成する必要があります。 log4j2.xml は、クラスパスからアクセスできる限り、 Scalaプロジェクトのどこにでも配置できます。
Log4j2フレームワークでは、緊急度の順に次のログレベルが定義されます。
致命的
エラー
WARN
INFO
DEBUG
TRACE
すべて
各ログレベルの意味の詳細については、 Log4 j2 ドキュメントの「 カスタム ログ レベル 」を参照してください。
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>
ロガーが正常に構成されたかテストするには、IDE ではなく sbt run コマンドを使用して次のコードを実行します。
val mongoClient = MongoClient("<connection string>") val database: MongoDatabase = mongoClient.getDatabase("<database>") val collection: MongoCollection[Document] = database.getCollection("<collection>") collection.find().first().printHeadResult()
... 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>
Log4 j2 の構成の詳細については、 Log4 j2 ドキュメントの Log4 j2 構成ガイドを参照してください。
ロガー名
ロギング フレームワークでは、ロギング イベントを整理するために階層的なロガー名が使用されます。ロガーの名前の後に続く"." が他のロガーの名前のプレフィックスである場合、そのロガーは他のロガーの祖先です。例、grandparent ロガーはgrandparent.parent ロガーの祖先であり、grandparent.parent.child ロガーの祖先である。
次のコードでは、parent ロガーと parent.child ロガーを作成します。parent ロガーは parent.child ロガーの祖先です。
import org.slf4j.Logger import org.slf4j.LoggerFactory val loggerParent: Logger = LoggerFactory.getLogger("parent") val loggerChild: Logger = LoggerFactory.getLogger("parent.child")
ロガー階層はScalaのクラス階層に似ています。ロガーは祖先のロガーのプロパティを継承し、独自のロガーを定義することもできます。
Scalaドライバーには以下のデフォルトのロガー名が含まれています。
org.mongodb.driver.authenticator: 認証org.mongodb.driver.client:MongoClientインスタンスorg.mongodb.driver.cluster: MongoDBデプロイのモニタリングorg.mongodb.driver.connection: 接続と接続プールorg.mongodb.driver.connection.tls: TLS/SSLorg.mongodb.driver.operation: 自動再試行を含む操作org.mongodb.driver.protocol: MongoDB配置で交換されるコマンドと応答org.mongodb.driver.uri: 接続文字列の解析org.mongodb.driver.management: Java Management Extensions (JMX)
ロガー名の例
次の例は、ルート ロガー構成を OFF に設定し、org.mongodb.driver.connection ロガー構成を INFO に設定して、アプリケーションがMongoDBデプロイへの接続に関連するメッセージのみをログに記録する方法を示しています。
対応するフレームワークの例構成と出力を表示するには、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="INFO" additivity="true"/> <root level="OFF"> <appender-ref ref="CONSOLE" /> </root> </configuration>
ロガーが正常に構成されたかテストするには、IDE ではなく sbt run コマンドを使用して次のコードを実行します。
val mongoClient = MongoClient("<connection string>") val database: MongoDatabase = mongoClient.getDatabase("<database>") val collection: MongoCollection[Document] = database.getCollection("<collection>") collection.find().first().printHeadResult()
... 829 [cluster-<your cluster id>-<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 の設定について詳しくは、公式構成ガイドを参照してください。
次のコードを 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="INFO"/> <Root level="OFF"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
ロガーが正常に構成されたかテストするには、IDE ではなく sbt run コマンドを使用して次のコードを実行します。
val mongoClient = MongoClient("<connection string>") val database: MongoDatabase = mongoClient.getDatabase("<database>") val collection: MongoCollection[Document] = database.getCollection("<collection>") collection.find().first().printHeadResult()
... 15:40:23.005 [cluster-<your cluster id>-<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 を参照してください。
クライアント ログ設定
applyToLoggerSettings() メソッドと applicationName() メソッドを使用して、MongoClientインスタンスにロギング設定を適用できます。
次の表では、ロガー設定に連鎖させて、ログの動作を変更できる方法について説明します。
方式 | 説明 |
|---|---|
| 1 つのログメッセージの最大ドキュメント長(文字数)を設定 デフォルト: |
クライアント ログ設定の例
次の例では、リクエストを送信するアプリケーションに名前を付け、最大ログメッセージ長として 5000 文字を指定しています。 IDE ではなく sbt run コマンドを使用して例を実行します。
val mongoClient = MongoClient( MongoClientSettings.builder() .applyConnectionString(ConnectionString("<your connection string>")) .applicationName("<application name>") .applyToLoggerSettings(builder => builder.maxDocumentLength(5000)) .build())
01:20:38.782 [main] INFO org.mongodb.driver.client -- MongoClient with metadata {"application": {"name": "<application name>"}, ..., loggerSettings=LoggerSettings{maxDocumentLength=5000}, ... timeoutMS=null} ... 01:20:41.022 [main] DEBUG org.mongodb.driver.protocol.command -- Command "listDatabases" succeeded ... Command reply: {"databases": [...], ...} 01:20:41.024 [main] DEBUG org.mongodb.driver.connection -- Connection checked in: address=<address>, driver-generated ID=6 myDb sample_airbnb sample_analytics ...
詳しくは、MongoClientSettings.Builder APIドキュメント を参照してください。