Overview
在本指南中,您可以学习;了解如何在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
记录器设置示例
以下示例展示了如何设立记录器。选择 Logback 或 Log4j2标签页,查看相应的语法:
选择 Maven 或 Gradle标签页,学习;了解如何使用项目的依赖项管理工具设立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
选择 Maven 或 Gradle标签页,学习;了解如何使用项目的依赖项管理工具设立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
。选择 Logback 或 Log4j2标签页,查看相应的语法:
在名为 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
文件设置为以下内容:
<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驾驶员定义了以下记录器名称来组织不同的日志事件:
记录器名称 | 说明 |
---|---|
| 记录身份验证事件 |
| 记录与 MongoClient 实例相关的事件 |
| 记录与MongoDB部署监控相关的事件 |
| 日志连接和连接池 |
| 记录 TLS 事件 |
| 记录操作,包括与自动重试相关的日志记录 |
| 记录发送到 MongoDB 部署的命令和从MongoDB部署收到的回复 |
| 记录连接字符串解析事件 |
| 记录Java管理扩展 (JMX) 事件 |
记录器名称示例
以下示例禁用根记录器,并将 org.mongodb.driver.connection
记录器的日志级别设置为 DEBUG
。这将导致驾驶员仅日志与 DEBUG
级别或更高级别的连接和连接池相关的消息。选择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="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
文件设置为以下内容:
<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 手册中的日志消息。
有关本指南中讨论的日志框架的完整信息,请参阅以下外部文档: