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 アーティファクトを選択したロギングフレームワークにバインドする方法を示しています。
ロガーの例
Logback タブまたは Log4j2 タブを選択して、選択したログフレームワークを設定し、対応するコード例を参照してください。
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 配置に接続し、ドキュメントを検索します。コードを追加した後、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()
注意
デフォルトのログレベル
Logback のデフォルトのログ レベルは DEBUG です。DEBUG レベルは、開いた接続やドライバーが MongoDB に送信して受信するコマンドなど、トラブルシューティングを目的とした詳細な診断メッセージをレコードします。Logback ロガーのログ レベルを変更する方法については、このページの「ロガーの構成」セクションの例を参照してください。
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 ファイルに追加します。このコードはエラー メッセージをログに記録します。コードを追加した後、IDE ではなく、sbt run を使用してターミナルでアプリケーションを実行します。
import org.slf4j.Logger import org.slf4j.LoggerFactory val logger: Logger = LoggerFactory.getLogger("MyApp") logger.error("Logging an Error")
注意
デフォルトのログレベル
Log4j2 のデフォルトのログ レベルは ERROR です。つまり、MongoDB Scala ドライバーで標準操作を実行しても、ログ レベルを構成しない限り Log4j2 からの出力は生成されません。Log4 j2 ロガーのログ レベルを変更する方法については、このページの「ロガーの構成」セクションの例を参照してください。
Log4 j2 の詳細については、 Log4 j2 マニュアルを参照してください。
SLF4J について詳しくは、SLF4J ドキュメントを参照してください。
ロガーを構成する
ロガーを構成するには、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()
configuring Logback について詳しくは、 Logback のマニュアル を参照してください。
Log4j2 は、クラスパス上の log4j2.xml という名前のファイルからその構成を読み取ります。このファイルはデフォルトでは存在しないため、作成する必要があります。log4j2.xml は、クラスパスからアクセスできる限り、Scala プロジェクト内のどこにでも配置できます。
Log4j2 フレームワークでは、次のログ レベルが定義されています。最も緊急度の高いものから順に並べています。
致命的
エラー
WARN
INFO
DEBUG
TRACE
すべて
各ログ レベルの意味について詳しくは、Log4j2 ドキュメントの「カスタム ログ レベル」を参照してください。
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()
Log4j2 の構成について詳しくは、Log4j2 ドキュメントの Log4j2 構成ガイド を参照してください。
ロガー名
ログフレームワークでは、階層的なロガー名を使用してログイベントを編成します。ロガーの名前の後に続く "." が他のロガーの名前のプレフィックスである場合、そのロガーは他のロガーの祖先です。例えば、 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()
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()
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())
詳しくは、MongoClientSettings.Builder APIドキュメント を参照してください。