bounty将在6天后过期。回答此问题可获得+50声望奖励。Artegon希望吸引更多人关注此问题。
我将Sping Boot 应用程序与Log4j2 XML配置文件放在resources/log4j2.xml
中。我使用的一个外部库是通过Maven依赖项安装的,并且在logback.xml
中有自己的日志记录配置。该文件似乎覆盖了我的Log4J2配置,日志记录现在由该配置文件控制。
我用以下方法获取记录器示例(org.apache.logging.log4j.Logger
):private static final Logger LOGGER = LogManager.getLogger(Foo.class);
问:如何从外部库禁用Log4J配置?
编辑1:添加了与Log4j2相关的Maven依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring.boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>${spring.boot.version}</version>
</dependency>
1条答案
按热度按时间h79rfbju1#
听起来外部库使用Logback进行日志记录,但您的应用程序使用的是Log4j 2。在这种情况下,外部库可能会覆盖您的Log4j 2配置,因为它是由类加载器首先加载的。
防止外部库覆盖Log4j 2配置的一种方法是从外部库中排除Logback依赖项。这可以通过向外部库的Maven依赖项添加exclusions元素并指定ch.qos.logback groupId和logback-classic artifactId来实现。
例如:
这将从外部库中排除Logback依赖项,从而防止它覆盖您的Log4j 2配置。
或者,如果要继续使用外部库的日志配置,可以尝试对应用程序使用Logback而不是Log4j 2。可以通过在pom.xml文件中包含spring-boot-starter-logging依赖项并排除spring-boot-starter-log4j 2依赖项来实现此目的。这将配置应用程序使用Logback而不是Log4j 2。
这将允许您的应用程序使用外部库的Logback配置,而不会覆盖您自己的配置。但是,您需要更新代码以使用Logback的logger API,而不是Log4j 2的logger API。例如,您将使用ch. qos. logback. classic. Logger,而不是org.apache.logging.log4j.Logger。
我希望这对你有帮助!如果你有任何其他问题,请告诉我。