Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
Kotlin Sync 驱动程序
/

记录驱动程序事件

在本指南中,您可以学习;了解如何在Kotlin Sync驾驶员中设立和配置记录器。

本指南介绍如何在驾驶员中记录事件。如果您想学习;了解如何在代码中使用有关驾驶员活动的信息,请参阅 监控应用程序事件指南。

Kotlin Sync驾驶员使用 Simple Logging Facade For Java (SLF4J),允许您指定所选的日志记录框架。有关 SLF4 J 的详细信息,请参阅 SLF4 J 文档。

设置记录器是可选项。要设立记录器,必须在项目中包含以下内容:

  • 类路径中的 slf4j-api 工件

  • 日志框架

  • slf4j-api 产品连接到日志框架的绑定

如果驾驶员在类路径中找不到 slf4j-api 工件,驾驶员输出以下警告并禁用所有进一步的日志记录:

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

以下示例展示了如何设立记录器。选择 LogbackLog4j2标签页,查看相应的语法:

选择 MavenGradle标签页,学习;了解如何使用项目的依赖项管理工具设立Logback:

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

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

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

dependencies {
implementation 'ch.qos.logback:logback-classic:1.2.11'
}

添加上述依赖项后,连接到 MongoDB 实例并使用以下代码检索文档:

val mongoClient = MongoClient.create(<connection uri>);
val database = mongoClient.getDatabase(<database>);
val collection = database.getCollection<Document>(<collection>);
collection.find().first();

前面的代码将输出类似于以下内容的消息:

...
12:14:55.833 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname>
12:14:55.834 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3
12:14:55.836 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=4 ms
12:14:55.843 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=9 ms

注意

默认日志级别

Logback 的默认日志级别为 DEBUG。要学习;了解如何更改 Logback 记录器的日志级别,请参阅本页的配置日志级别部分。

选择 MavenGradle标签页,学习;了解如何使用项目的依赖项管理工具设立Log4j2。

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

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

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

dependencies {
implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1'
}

包含前面的依赖项后,使用以下代码日志错误:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
val logger = LoggerFactory.getLogger("MyApp");
logger.error("Logging an Error");

前面的代码将输出类似于以下内容的消息:

12:35:00.438 [main] ERROR <my package path> - Logging an Error

注意

默认日志级别

Log4J2 的默认日志级别为 ERROR。这意味着,如果没有配置,在Kotlin Sync驾驶员中运行标准操作不会从 Log4J2 中生成输出。要学习;了解如何更改 Log4J2 记录器的日志级别,请参阅本页的配置日志级别部分。

您可以使用绑定到 SLF4J 的日志框架的配置系统来配置记录器的日志级别。日志级别指定了记录器输出消息的紧急程度下限。

以下示例将日志级别配置为 INFO。选择 LogbackLog4j2标签页,查看相应的语法:

在名为 logback.xml 的文件中指定 Logback 配置。您必须能够从类路径访问权限此文件。

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 uri>);
val database = mongoClient.getDatabase(<database>);
val collection = database.getCollection<Document>(<collection>);
collection.find().first();

此代码生成的输出类似于以下内容:

...
317 [main] INFO org.mongodb.driver.client - MongoClient with metadata {"driver": {"name": "<driver-name>", "version": "<driver-version>"}, "os": {"type": "<os-type>", "name": "<os-name>", "architecture": "<architecture>", "version": "<os-version>"}, "platform": "<platform-info>"} created with settings <MongoClientSettings>
345 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=<MongoDB hostname>, type=<server-type>, cryptd=false, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=<max-wire-version>, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=<round-trip-nanos>, minRoundTripTimeNanos=<min-round-trip-nanos}

在名为 log4j2.xml 的文件中指定 Log4j2 配置。您必须能够从类路径访问权限此文件。

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 uri>);
val database = mongoClient.getDatabase(<database>);
val collection = database.getCollection<Document>(<collection>);
collection.find().first();

此代码生成的输出类似于以下内容:

...
21:19:25.696 [main] INFO org.mongodb.driver.client - MongoClient with metadata {"driver": {"name": "<driver-name>", "version": "<driver-version>"}, "os": {"type": "<os-type>", "name": "<os-name>", "architecture": "<architecture>", "version": "<os-version>"}, "platform": "<platform-info>"} created with settings <MongoClientSettings>
21:19:25.710 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=<MongoDB hostname>, type=<server-type>, cryptd=false, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=<max-wire-version>, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=<round-trip-nanos>, minRoundTripTimeNanos=<min-round-trip-nanos}

记录器使用记录器名称来帮助组织不同的日志事件。记录器名称是构成层次结构的字符串。如果一个记录器的名称后跟 "." 是另一个记录器名称的前缀,则该记录器是另一个记录器的祖先。示例,"grandparent""grandparent.parent" 的祖先,而 又是 "grandparent.parent.child" 的祖先。记录器继承其祖先记录器的属性,还可以定义自己的属性。

Kotlin Sync驾驶员定义了以下记录器名称来组织不同的日志事件:

记录器名称
说明

org.mongodb.driver.authenticator

记录身份验证事件

org.mongodb.driver.client

记录与 MongoClient 实例相关的事件

org.mongodb.driver.cluster

记录与MongoDB部署监控相关的事件

org.mongodb.driver.connection

日志连接和连接池

org.mongodb.driver.connection.tls

记录 TLS 事件

org.mongodb.driver.operation

记录操作,包括与自动重试相关的日志记录

org.mongodb.driver.protocol

记录发送到 MongoDB 部署的命令和从MongoDB部署收到的回复

org.mongodb.driver.uri

记录连接字符串解析事件

org.mongodb.driver.management

记录Java管理扩展 (JMX) 事件

以下示例禁用根记录器,并将 org.mongodb.driver.connection 记录器的日志级别设置为 DEBUG。这将导致驾驶员仅日志与 DEBUG 级别或更高级别的连接和连接池相关的消息。选择LogbackLog4j2标签页以查看相应的语法:

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="DEBUG" additivity="true"/>
<root level="OFF">
<appender-ref ref="CONSOLE" />
</root>
</configuration>

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

val mongoClient = MongoClient.create(<connection uri>);
val database = mongoClient.getDatabase(<database>);
val collection = database.getCollection<Document>(<collection>);
collection.find().first();

此代码生成类似于以下内容的输出。

...
255 [main] DEBUG org.mongodb.driver.connection - Connection pool created for <MongoDB hostname> using options <connection-pool-options>
301 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] DEBUG org.mongodb.driver.connection - Connection pool ready for <MongoDB hostname>
321 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname>
323 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3
335 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=<connect-duration> ms
336 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=<checkout-duration> ms
363 [main] DEBUG org.mongodb.driver.connection - Connection checked in: address=<MongoDB hostname>, driver-generated ID=3

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="DEBUG"/>
<Root level="OFF">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

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

val mongoClient = MongoClient.create(<connection uri>);
val database = mongoClient.getDatabase(<database>);
val collection = database.getCollection<Document>(<collection>);
collection.find().first();

此代码生成的输出类似于以下内容:

...
21:27:17.035 [main] DEBUG org.mongodb.driver.connection - Connection pool created for <MongoDB hostname> using options <connection-pool-options>
21:27:17.058 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] DEBUG org.mongodb.driver.connection - Connection pool ready for <MongoDB hostname>
21:27:17.064 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname>
21:27:17.069 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3
21:27:17.075 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=<connect-duration> ms
21:27:17.075 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=<checkout-duration> ms
21:27:17.086 [main] DEBUG org.mongodb.driver.connection - Connection checked in: address=<MongoDB hostname>, driver-generated ID=3

要学习;了解有关 MongoDB 日志记录功能的更多信息,请参阅 MongoDB Server 手册中的日志消息

有关本指南中讨论的日志框架的完整信息,请参阅以下外部文档:

后退

日志记录和监控

在此页面上