AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

ログ記録

このガイドでは、 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 のデフォルトのログレベルは 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ファイルに追加します。コードはエラー メッセージをログに記録します。コードを追加したら、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 のデフォルトのログレベルは ERROR です。つまり、 MongoDB Scalaドライバーで標準操作を実行中、ログレベルが設定されていない Log j からの出力は生成されません。 Log4 j2 ロガーのログレベルを変更する方法については、4 2このページの「ロガーの構成」セクションの例 を参照してください。

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ファイルを次のように設定します。

<?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>

ロガーが正常に構成されたかテストするには、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/SSL

  • org.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ファイルに挿入します。

<?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>

ロガーが正常に構成されたかテストするには、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インスタンスにロギング設定を適用できます。

次の表では、ロガー設定に連鎖させて、ログの動作を変更できる方法について説明します。

方式
説明

maxDocumentLength()

1 つのログメッセージの最大ドキュメント長(文字数)を設定

デフォルト1000

次の例では、リクエストを送信するアプリケーションに名前を付け、最大ログメッセージ長として 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ドキュメント を参照してください。