文档菜单
文档首页
/ / /
Kotlin 协程
/

日志记录

在本页

  • 概述
  • 设置日志记录器
  • 背景
  • 示例 - 设置
  • 配置您的日志记录器
  • 示例 - 配置
  • 日志记录器名称
  • 示例 - 名称

在本指南中,您可以学习如何在MongoDB Kotlin驱动程序中设置和配置日志记录器。

您将学习如何

  • 使用Simple Logging Facade For Java (SLF4J)设置日志记录器

  • 配置日志记录器的日志级别

本指南展示了如何在驱动程序中记录事件。如果您想了解如何在代码中使用驱动程序活动信息,请考虑阅读我们的监控指南.

本节提供了设置日志记录器所需的依赖关系的背景信息,并提供了示例日志记录器设置。

MongoDB Kotlin 驱动程序使用 Simple Logging Facade For Java (SLF4J)。SLF4J 允许您在部署时指定所选择的日志框架。有关 SLF4J 的更多信息,请参阅 SLF4J 文档.

设置日志记录器是可选的。当您启动应用程序时,MongoDB Kotlin 驱动程序会在您的类路径中查找slf4j-api 依赖项。如果驱动程序找不到 slf4j-api 依赖项,则驱动程序会使用 java.util.logging 记录以下警告,并禁用所有进一步的日志记录

WARNING: SLF4J not found on the classpath. Logging is disabled for the 'org.mongodb.driver' component

要设置日志记录器,您必须在项目中包含以下内容。

  • slf4j-api 依赖项

  • 一个日志框架

  • 一个 绑定

注意

对于最受欢迎的日志框架,通常有一个单一的绑定依赖项,其中列出 slf4j-api 和日志框架作为依赖项。这意味着您可以通过将一个依赖项添加到项目的依赖项列表中设置日志记录器。以下示例中将展示这一点。

绑定是一段代码,它将 slf4j-api 依赖项与日志框架连接起来。以下示例显示了如何将 slf4j-api 依赖项绑定到两个最流行的日志框架 Log4j2 和 Logback。

此示例显示了如何设置您的日志记录器。点击与您项目所使用的日志框架对应的选项卡。

提示

依赖项版本

以下列出的版本仅供参考,而非事实依据。您应检查 SLF4J 和所选择的日志框架的官方文档,以确保版本信息的准确性。

选择您在项目中使用的构建工具。

将以下依赖项添加到您的 pom.xml 文件中。

<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
</dependencies>

将以下依赖项添加到您的 build.gradle.kts 文件中

dependencies {
implementation("ch.qos.logback:logback-classic:1.2.11")
}

一旦包含上述依赖项,使用以下代码连接到您的 MongoDB 实例并检索文档

val mongoClient = MongoClient.create("<connection string>");
val database = mongoClient.getDatabase(DB_NAME_PLACEHOLDER);
val collection = database.getCollection<Document>(COLLECTION_NAME_PLACEHOLDER);
collection.find().firstOrNull()
...
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。要了解如何更改 Logback 日志记录器的日志级别,请参阅此页面的“配置您的日志记录器”部分中的示例。

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

选择您在项目中使用的构建工具。

将以下依赖项添加到您的 pom.xml 文件中。

<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
</dependency>
</dependencies>

请将以下依赖项添加到您的build.gradle.kts文件中。

dependencies {
implementation("org.apache.logging.log4j:log4j-slf4j-impl:2.17.1")
}

一旦添加了上述依赖项,请使用以下代码记录错误

val loggerParent = LoggerFactory.getLogger("parent")
val loggerChild = LoggerFactory.getLogger("parent.child")
val loggerParent = LoggerFactory.getLogger("parent")
val loggerChild = LoggerFactory.getLogger("parent.child")
12:35:00.438 [main] ERROR <my package path> - Logging an Error

注意

默认日志级别

Log4J2的默认日志级别为ERROR。这意味着在没有配置的情况下,运行MongoDB Kotlin驱动程序的标准操作将不会从Log4J2产生输出。有关如何更改Log4J2记录器的日志级别的示例,请参阅此页面“配置您的记录器”部分的示例。

有关Log4j2的更多信息,请参阅Log4j2手册。

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

以下示例展示了如何使用您日志框架的配置系统来设置日志记录器的日志级别

日志记录器的日志级别指定了一个最低界限,只有当消息的紧急程度达到这个界限时,日志记录器才会输出该消息。

此示例展示了如何配置您的日志记录器日志级别为INFO。选择您项目中使用的日志框架对应的标签页。

在名为logback.xml的文件中指定Logback配置。您的logback.xml文件不必位于特定位置,但它必须可以从您的类路径中访问。

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 string>");
val database = mongoClient.getDatabase(DB_NAME_PLACEHOLDER);
val collection = database.getCollection<Document>(COLLECTION_NAME_PLACEHOLDER);
collection.find().firstOrNull()
...
1317 [cluster-ClusterId{value='<your cluster id>', description='null'}-<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>

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

在名为log4j2.xml的文件中指定Log4j2配置。您的log4j2.xml文件不必位于特定位置,但它必须可以从您的类路径中访问。

Log4j2框架定义了以下日志级别。以下按紧急程度从高到低列出日志级别

  • FATAL

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

  • ALL

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

要测试您的日志记录器配置是否成功,请运行以下代码。

val mongoClient = MongoClient.create("<connection string>");
val database = mongoClient.getDatabase(DB_NAME_PLACEHOLDER);
val collection = database.getCollection<Document>(COLLECTION_NAME_PLACEHOLDER);
collection.find().firstOrNull()
...
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>

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

您的记录器使用记录器名称来帮助组织不同的记录事件。记录器名称是形成层次结构的字符串。如果一个记录器的名称后面跟着一个"."是这个其他记录器名称的前缀,那么这个记录器是另一个记录器的祖先。例如,"grandparent""grandparent.parent"的祖先,而"grandparent.parent.child""grandparent.parent"的祖先。

具体示例,以下是代码中记录器层次结构的样子。

import org.slf4j.LoggerFactory
val loggerParent = LoggerFactory.getLogger("parent")
val loggerChild = LoggerFactory.getLogger("parent.child")

记录器继承其祖先记录器的属性并可以定义自己的属性。您可以将此视为类似于Kotlin中的类继承。

MongoDB Kotlin驱动程序定义以下记录器名称来组织驱动程序中的不同记录事件。以下是驱动程序中定义的记录器名称及其对应的记录事件

  • 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 : JMX(Java管理扩展)

此示例展示了如何为特定驱动程序日志记录器更改日志级别。我们将根日志记录器设置为关闭,并将org.mongodb.driver.connection日志记录器设置为INFO。这将导致应用程序仅记录与连接到MongoDB实例相关的消息。

选择与您项目中使用的日志框架对应的选项卡。

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

要测试您的日志记录器配置是否成功,请运行以下代码

val mongoClient = MongoClient.create("<connection string>");
val database = mongoClient.getDatabase(DB_NAME_PLACEHOLDER);
val collection = database.getCollection<Document>(COLLECTION_NAME_PLACEHOLDER);
collection.find().firstOrNull()
...
829 [cluster-rtt-ClusterId{value='<some value>', description='null'}-<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的更多信息,请参阅官方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>

要测试您的日志记录器配置是否成功,请运行以下代码。

val mongoClient = MongoClient.create("<connection string>");
val database = mongoClient.getDatabase(DB_NAME_PLACEHOLDER);
val collection = database.getCollection<Document>(COLLECTION_NAME_PLACEHOLDER);
collection.find().firstOrNull()
...
15:40:23.005 [cluster-ClusterId{value='<some value>', description='null'}-<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配置指南。

返回

排序规则

© . All rights reserved.