根级别TRACE会导致无限循环和错误,但INFO级别不会在Logback中

问题描述 投票:0回答:1

我面临 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 不应创建无限循环,从而在遇到此类错误时导致软件无法运行。

提前谢谢您!

java spring-boot couchbase logback trace
1个回答
0
投票

正如所指出的,该消息未记录在 INFO 中。仅调试和跟踪。

couchbase 集群会尝试连接直到关闭,因此它并不是无限的。问题似乎是在您的环境中,couchbase SDK 无法连接到服务器。 SDK 中的 waitUntilReady 方法提供了有关 SDK 无法连接的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.