对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs 菜单

日志记录

在本指南中,您可以学习如何在 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 部署并检索文档。添加代码后,使用 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()

注意

默认日志级别

Logback 的默认日志级别为 DEBUG。DEBUG 级别记录用于疑难排除的详细诊断消息,例如已打开的连接以及驱动程序发送到 MongoDB 并从 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")

注意

默认日志级别

Log4j2 的默认日志级别是 ERROR。这意味着,如果没有日志级别配置,在 MongoDB Scala 驱动程序中运行标准操作将不会从 Log4j2 中产生输出。要了解如何更改 Log4j2 记录器的日志级别,请参阅本页面“配置记录器”部分中的示例。

有关 Log4j2 的详细信息,请参阅 Log4j2 手册。

有关 SLF4J 的更多信息,请参阅 SLF4J 文档。

要配置您的记录器,必须使用绑定到 SLF4J 的记录框架的配置系统。

日志级别指定消息必须多紧急,日志记录器才会输出该消息。以下示例展示了如何使用每个日志记录框架的配置系统将日志级别设置为 INFO。选择 Logback 或 Log4j2 标签页,查看每种方法对应的代码:

Logback 从类路径中名为 logback.xml 的文件读取其配置。此文件默认不存在,因此您必须创建它。只要可以从类路径访问 logback.xml,您就可以将其放置在 Scala 项目中的任何位置。

Logback 框架定义了以下日志级别,从最紧急到最不紧急排序:

  • ERROR

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

要测试记录器配置是否成功,请使用 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()

有关配置 Logback 的更多信息,请参阅Logback 手册。

Log4j2 从类路径中名为 log4j2.xml 的文件读取其配置。此文件默认不存在,因此您必须创建它。只要可以从类路径访问,您就可以将 log4j2.xml 放置在 Scala 项目中的任何位置。

Log4j2框架定义了以下日志级别,按从最紧急到最不紧急的顺序列出:

  • 致命

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

  • 所有

如需了解每个日志级别的含义,请参阅 Log4j2 文档中的“自定义日志级别”。

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

要测试记录器配置是否成功,请使用 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()

有关配置日志4j2的更多信息,请参阅日志4j2文档中的 日志4j2配置指南。

记录框架使用分层的记录器名称来组织记录事件。如果一个记录器的名称加上 "." 是另一个记录器名称的前缀,则前者是后者的祖先。例如,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 管理扩展 (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>

要测试记录器配置是否成功,请使用 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()

有关配置 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>

要测试记录器配置是否成功,请使用 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()

有关配置 Log4j2 的更多信息,请参阅官方 Log4j2 配置指南。

您可以使用 applyToLoggerSettings() 和 applicationName() 方法将日志记录设置应用MongoClient实例。

下表描述了可以链接到记录器设置以修改日志记录行为的方法:

方法
说明

maxDocumentLength()

设置单个日志消息的最大文档长度(以字符为单位)

默认:1000。

以下示例命名发送请求的应用程序,并指定 5000 个字符为最大日志消息长度。使用 sbt run 命令而不是 IDE 运行示例。

val mongoClient = MongoClient(
MongoClientSettings.builder()
.applyConnectionString(ConnectionString("<your connection string>"))
.applicationName("<application name>")
.applyToLoggerSettings(builder =>
builder.maxDocumentLength(5000))
.build())

有关更多信息,请参阅 MongoClientSettings.Builder API文档。