我面临 Logback 的问题,将根级别设置为 TRACE 似乎会导致无限循环并导致以下错误:
2023-10-23 14:27:54.673+02:00 [DEBUG] Service ID: [] RequestIDs: [] com.couchbase.config - [com.couchbase.config][BucketOpenRetriedEvent][1000us] Failed to open bucket ["bucketName"] {"coreId":"0x349ec42600000001"}
com.couchbase.client.core.error.ConfigException: Seed Node NodeIdentifier{address=couchbase, managerPort=8091} is disconnected, bailing out.
at com.couchbase.client.core.config.loader.BaseBucketLoader.lambda$ensureServiceConnected$6(BaseBucketLoader.java:136)
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:106)
at reactor.core.publisher.FluxReplay$SizeBoundReplayBuffer.replayNormal(FluxReplay.java:877)
at reactor.core.publisher.FluxReplay$SizeBoundReplayBuffer.replay(FluxReplay.java:965)
at reactor.core.publisher.SinkManyReplayProcessor$ReplayInner.request(SinkManyReplayProcessor.java:576)
...
2023-10-23 14:27:54.673+02:00 [DEBUG] Service ID: [] RequestIDs: [] com.couchbase.config - ---> Repeat
但是,当我将根级别设置为INFO时,我没有遇到这个问题。有人可以帮助我理解为什么将根级别设置为 TRACE 会触发此行为吗?
这是我的 Logback 配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Define log properties -->
<property name="SERVICE_NAME" value="Service" />
<property name="LOG_DIR" value="logs/" />
<property name="MAX_FILE_SIZE" value="10MB" />
<property name="MAX_HISTORY" value="7" />
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSSXXX} [%-5level] ${SERVICE_NAME} id: [%X{id}] RequestIDs: [%X{requestIDs}] %logger - %msg%n" />
<!-- Console Appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- Error Log File Appender -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/${SERVICE_NAME}_error.log</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/${SERVICE_NAME}_error.log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
</appender>
<!-- Warn Log File Appender -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/${SERVICE_NAME}_warn.log</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/${SERVICE_NAME}_warn.log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
</appender>
<!-- Debug Log File Appender -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/${SERVICE_NAME}_debug.log</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/${SERVICE_NAME}_debug.log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
</appender>
<!-- Info Log File Appender -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/${SERVICE_NAME}_info.log</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/${SERVICE_NAME}_info.log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
</appender>
<!-- Fatal Log File Appender -->
<appender name="FATAL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/${SERVICE_NAME}_fatal.log</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>FATAL</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/${SERVICE_NAME}_fatal.log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
</appender>
<!-- Trace Log File Appender -->
<appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/${SERVICE_NAME}_trace.log</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>TRACE</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${
LOG_DIR}/${SERVICE_NAME}_trace.log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
</appender>
<!-- Root Logger Configuration -->
<root level="trace">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ERROR_FILE" level="error" />
<appender-ref ref="WARN_FILE" level="warn" />
<appender-ref ref="DEBUG_FILE" level="debug" />
<appender-ref ref="INFO_FILE" level="info" />
<appender-ref ref="FATAL_FILE" level="error" />
<appender-ref ref="TRACE_FILE" level="trace" />
</root>
</configuration>
如果有人能够解释为什么更改根级别会产生这种效果,那就太好了。 TRACE 级别是否存在某些特定因素可能导致此行为?
我们有一个生成错误的集成测试。该错误进入无限循环,当我将根级别设置为“跟踪”时,我必须通过任务管理器终止该循环。但是,如果我将根级别设置为“Info”,则会显示常规错误消息,并且应用程序会正常终止,而不会进入无限循环。集成测试已修复,因此不再出现无限循环。但是,我的 logback 不应创建无限循环,从而在遇到此类错误时导致软件无法运行。
提前谢谢您!
正如所指出的,该消息未记录在 INFO 中。仅调试和跟踪。
couchbase 集群会尝试连接直到关闭,因此它并不是无限的。问题似乎是在您的环境中,couchbase SDK 无法连接到服务器。 SDK 中的 waitUntilReady 方法提供了有关 SDK 无法连接的更多信息。