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
相关产品推荐
相关产品推荐

