You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将Logbook日志级别设置为高于TRACE?INFO级别配置无效问题求助

问题核心解析

你遇到的问题本质是Logbook的默认设计逻辑和你配置的理解偏差:

官方文档要求设为TRACE级别,是因为Logbook内部输出请求/响应日志时,默认使用的就是TRACE级别。而你配置的logbook.write.level=INFO,其实是设置Logbook的日志过滤阈值(只有级别≥INFO的日志才会被允许写入)——但Logbook本身输出的请求日志是TRACE级(低于INFO),所以直接被过滤掉了;同时logging.level.org.zalando.logbook=INFO会让日志框架直接丢弃所有TRACE级日志,自然看不到任何输出。

解决方法

下面提供两种可行方案,根据你的需求选择:

方案一:自定义Logbook日志写入器(推荐,灵活可控)

通过自定义LogWriter Bean,替换默认实现,让Logbook用INFO级别输出请求/响应日志:

  1. 创建配置类,实现自定义写入器:
import org.zalando.logbook.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class LogbookCustomConfig {

    private static final Logger LOGBOOK_LOG = LoggerFactory.getLogger(Logbook.class);

    @Bean
    public LogWriter infoLevelLogWriter() {
        return new LogWriter() {
            // 处理请求日志
            @Override
            public void write(Precorrelation precorrelation, HttpRequest request) {
                if (LOGBOOK_LOG.isInfoEnabled()) {
                    // 基础请求信息
                    LOGBOOK_LOG.info("Request [{}] {} {}", precorrelation.getId(), request.getMethod(), request.getRequestUri());
                    // 可选:输出请求体(注意大小限制)
                    if (request.hasBody()) {
                        LOGBOOK_LOG.info("Request Body [{}]: {}", precorrelation.getId(), request.getBodyAsString());
                    }
                }
            }

            // 处理响应日志
            @Override
            public void write(Correlation correlation, HttpResponse response) {
                if (LOGBOOK_LOG.isInfoEnabled()) {
                    // 基础响应信息
                    LOGBOOK_LOG.info("Response [{}] {} | Duration: {}ms", correlation.getId(), response.getStatus(), correlation.getDuration().toMillis());
                    // 可选:输出响应体(注意大小限制)
                    if (response.hasBody()) {
                        LOGBOOK_LOG.info("Response Body [{}]: {}", correlation.getId(), response.getBodyAsString());
                    }
                }
            }
        };
    }
}
  1. 修改application.yml配置:
logbook:
  exclude:
    - /swagger-ui.html
    - /schema/**
    - /health
    - /favicon.ico
    - /togglz-console/**
  filter.enabled: true
  format.style: json
  write:
    max-body-size: 8192
logging:
  level:
    org.zalando.logbook: INFO

这样自定义写入器会直接用INFO级别输出日志,日志框架设置为INFO后就能正常打印。

方案二:Logback级别映射(无需大量代码修改)

通过Logback的转换器,把Logbook输出的TRACE级别日志在显示时映射为INFO,同时保持Logbook的内部配置要求:

  1. 在logback-spring.xml中添加配置:
<configuration>
    <!-- 允许Logbook的TRACE日志被接收 -->
    <logger name="org.zalando.logbook" level="TRACE"/>

    <!-- 自定义级别转换器,把Logbook的TRACE转为INFO显示 -->
    <turboFilter class="ch.qos.logback.classic.turbo.MatchingFilter">
        <logger>org.zalando.logbook</logger>
        <level>TRACE</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>NEUTRAL</onMismatch>
    </turboFilter>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
                <conversionRule conversionWord="level" converterClass="com.yourpackage.LogbookLevelConverter"/>
            </layout>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>
  1. 创建转换器类:
import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;

public class LogbookLevelConverter extends ClassicConverter {
    @Override
    public String convert(ILoggingEvent event) {
        // 仅针对Logbook的TRACE日志,显示为INFO
        if ("org.zalando.logbook".equals(event.getLoggerName()) && event.getLevel().equals(ch.qos.logback.classic.Level.TRACE)) {
            return "INFO";
        }
        return event.getLevel().toString();
    }
}

这种方式既能满足Logbook内部需要TRACE级别的要求,又能让日志显示为INFO级别。

内容的提问来源于stack exchange,提问作者PureVodka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 15:07:41