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

Spring Boot中Logback仅部分包输出日志求助

Logback日志异常:仅单个类日志正常输出,其余类无日志

完整项目可查看GitHub的no-logs分支。

问题场景

项目通过docker-compose部署RabbitMQ和PostgreSQL,遇到Logback日志异常:仅一个类的日志能正常输出,其余类均无日志输出。

正常输出的日志类

引入的认证系统中,com.backend.security.jwt包下的AuthEntryPointJwt类,其logger.error日志可以正常显示:

@Component
public class AuthEntryPointJwt implements AuthenticationEntryPoint {

  private static final Logger logger = LoggerFactory.getLogger(AuthEntryPointJwt.class);

  @Override
  public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException)
      throws IOException, ServletException {
    logger.error("Unauthorized error: {}", authException.getMessage());

主动触发错误时,能看到如下日志条目:

2025-03-24 19:49:34 2025-03-24T18:49:34.406Z ERROR 1 --- [order-taking-api] [nio-8080-exec-5] c.b.security.jwt.AuthEntryPointJwt       : Unauthorized error: Full authentication is required to access this resource

该类属于com.backend.security包,而我开发的业务逻辑位于com.backend.order包。

无日志输出的自定义类

我按照同样方式编写了OrderController:

@RestController
@RequestMapping("/api/orders")
public class OrderController {
    private final static Logger log = LoggerFactory.getLogger(OrderController.class);

    private final OrderService orderService;

    public OrderController(OrderService orderService) {
        this.orderService = orderService;
        log.info("OrderController initialized");
    }

    @PostMapping
    public ResponseEntity<String> createOrder(@RequestBody Order order) {
        System.console().printf("Received order: %s%n", order);
        log.info("Received order {}", order);
        log.error("An error occurred while processing the order");

OrderController位于com.backend.order.controllers包,其中添加了多条测试日志,但均无法显示,无论怎么调整配置都无效。不过接口可以正常访问。

配置情况

JWT相关日志在未做任何配置时就能正常输出,之后我添加了logback-spring.xml配置文件,更新application.properties将日志级别设为TRACE并指定日志文件。

logback-spring.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="LOGS" value="./logs" />

    <appender name="Console"
        class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1}): %msg%n%throwable
            </Pattern>
        </layout>
    </appender>

    <appender name="RollingFile"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS}/spring-boot-logger.log</file>
        <encoder
            class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d %p %C{1} [%t] %m%n</Pattern>
        </encoder>

        <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily and when the file reaches 10 MegaBytes -->
            <fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <!-- LOG everything at INFO level -->
    <root level="info">
        <appender-ref ref="RollingFile" />
        <appender-ref ref="Console" />
    </root>

    <logger name="com.backend" level="trace" additivity="false">
        <appender-ref ref="RollingFile" />
        <appender-ref ref="Console" />
    </logger>

</configuration>

(参考示例将原配置中的com.baeldung改为com.backend)

application.properties配置

# Logging
logging.level.root=TRACE
logging.file.name=logs/app.log
logging.file.path=logs

尝试多种配置后,仍只有认证模块的日志正常输出,自定义订单模块无任何日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:15:21