Spring Boot 3.2 在关闭期间自动更改日志级别

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

我们最近将 springBoot 版本升级到 3.2,以及 Java 21 64 位。 我们在关闭 Spring Boot 应用程序时观察到有线行为,日志级别自动将 INFO 更改为 ERROR,并且我们没有收到预期的日志消息。

经过这么多研究,我们发现有一个功能“自动日志级别传播”。

我们有一些重要的信息消息应该在应用程序关闭期间出现。

我们尝试禁用一些属性,例如: 管理.跟踪.启用 = false spring.main.log-shutdown-info = true

但是没有任何帮助,它仍然是错误。

请建议并帮助我们如何在申请结束时获得 INFO 级别。

Spring Boot 应用程序关闭时我们需要 INFO 日志级别。

根据带有参数运行应用程序时的关闭日志

-Dlog4j2.debug
:
TRACE StatusLogger [AsyncContext@25bbe1b6] AsyncLoggerDisruptor: disruptor has been shut down
:

关机日志

TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class jp.co.tec.ngp.broker.device.controller.DeviceAdminApiContoller
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class jp.co.tec.ngp.broker.device.admin.DeviceAdminServiceImpl
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class jp.co.tec.ngp.broker.device.admin.BrokerAdminServiceImpl
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class jp.co.tec.ngp.broker.service.impl.BrokerServiceImpl
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.transport.tcp.TcpTransportFactory
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.util.ServiceSupport
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.transport.TransportSupport
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.transport.tcp.TcpTransport
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.transport.AbstractInactivityMonitor
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.transport.InactivityMonitor
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.transport.WireFormatNegotiator
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.transport.ResponseCorrelator
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.util.IdGenerator
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.thread.SchedulerTimerTask
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.transport.FutureResponse
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.AdvisoryConsumer
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.ActiveMQSession
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.TransactionContext
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.ActiveMQSessionExecutor
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.ActiveMQMessageProducer
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.management.JMSEndpointStatsImpl
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.util.ThreadPoolUtils
TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class org.apache.activemq.thread.TaskRunnerFactory
DEBUG StatusLogger [AsyncContext@25bbe1b6] AsyncLoggerDisruptor: shutting down disruptor for this context.
TRACE StatusLogger [AsyncContext@25bbe1b6] AsyncLoggerDisruptor: disruptor has been shut down.
DEBUG StatusLogger Stopping LoggerContext[name=AsyncContext@25bbe1b6, org.apache.logging.log4j.core.async.AsyncLoggerContext@45d2ade3]...
WARN StatusLogger [AsyncContext@25bbe1b6] Ignoring log event after log4j was shut down: INFO [jp.co.tec.ngp.broker.device.base.statemachine.BaseStateMachineListener] [stateChanged] -------------------------------------------
TRACE StatusLogger Unregistering 1 MBeans: [org.apache.logging.log4j2:type=AsyncContext@25bbe1b6]
WARN StatusLogger Ignoring log event after log4j was shut down
TRACE StatusLogger Unregistering 1 MBeans: [org.apache.logging.log4j2:type=AsyncContext@25bbe1b6,component=StatusLogger]
WARN StatusLogger [AsyncContext@25bbe1b6] Ignoring log event after log4j was shut down: INFO [jp.co.tec.ngp.broker.device.base.statemachine.BaseStateMachineListener] [stateChanged] Device- CashChanger state change to sub state STOPPED
TRACE StatusLogger Unregistering 1 MBeans: [org.apache.logging.log4j2:type=AsyncContext@25bbe1b6,component=ContextSelector]
WARN StatusLogger Ignoring log event after log4j was shut down
spring-boot logging log4j2
1个回答
0
投票

您遇到的问题是由于应用程序监听器之间的顺序造成的:

LoggingApplicationListener
具有非常高的优先级:

Ordered.HIGHEST_PRECEDENCE + 20

这意味着侦听器在启动时很早就被调用,但除非我弄错了,否则 Spring 在关闭时以相同的顺序调用侦听器。

如果您的关闭侦听器需要记录日志,则其优先级应介于

Ordered.HIGHEST_PRECEDENCE
Ordered.HIGHEST_PRECEDENCE + 19
之间。可以通过实现
Ordered
或使用
@Order
注释来指定顺序。

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