如何将 log4j2 与 spring boot 执行器一起使用

Posted

技术标签:

【中文标题】如何将 log4j2 与 spring boot 执行器一起使用【英文标题】:How to use log4j2 with spring boot actuators 【发布时间】:2019-11-14 00:05:33 【问题描述】:

我正在尝试将 log4j2 中的日志提供给 Spring boot 执行器。不幸的是,我只实现了如何更改 ROOT 记录器的日志级别。也许有人知道如何将执行器与 log4j2 连接?

【问题讨论】:

【参考方案1】:

我以另一种方式找到了解决方案。无论您如何配置 log4j2,因为 /logging 执行器中的 spring boot admin 读取日志文件。因此,我必须写入该文件的路径。

只有当你有 logback 时才有效,spring 写入路径中的文件

application.yml

...
logging:
  path: ./path/to/file
...

终于我找到了log4j2的解决方案:

application.yml

...
endpoints:
  logfile:
    external-file: logs/custom.log
...

只有在你去掉日志记录的情况下才有效。* 属性

在这个answer找到它

【讨论】:

【参考方案2】:

这个link 可能会有所帮助。

一个简单的 log4j2 配置如下所示:

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

<Configuration>
<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout
            pattern="%style%dISO8601black %highlight%-5level [%style%tbright,blue] %style%C1.bright,yellow: %msg%n%throwable" />
    </Console>

    <RollingFile name="RollingFile"
        fileName="./logs/spring-boot-logger-log4j2.log"
        filePattern="./logs/$$date:yyyy-MM/spring-boot-logger-log4j2-%d-dd-MMMM-yyyy-%i.log.gz">
        <PatternLayout>
            <pattern>%d %p %C1. [%t] %m%n</pattern>
        </PatternLayout>
        <Policies>
            <!-- rollover on startup, daily and when the file reaches 10 MegaBytes-->
            <OnStartupTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="10 MB" />
            <TimeBasedTriggeringPolicy />
        </Policies>
    </RollingFile>
</Appenders>

<Loggers>
    <!-- LOG everything at INFO level -->
    <Root level="info">
        <AppenderRef ref="Console" />
        <AppenderRef ref="RollingFile" />
    </Root>

    <!-- LOG "com.example*" at TRACE level -->
    <Logger name="com.example" level="trace"></Logger>
</Loggers>

</Configuration>

如果您使用这样的文件,则只有在 -tag 中定义的 Logger 将显示在执行器端点。因此,如果您想查看更多 Logger,则必须将它们添加到此文件中。

【讨论】:

这是正确的答案,但不足以让我达到预期的结果。看看我下面的回答。结合您的解决方案,这可以全面解决问题。

以上是关于如何将 log4j2 与 spring boot 执行器一起使用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Sleuth 在我的 Spring Boot 服务中不能与 Log4j2 一起使用

Spring Boot系列——如何集成Log4j2

[Docker容器内的Spring Boot应用程序的log4j2日志

如何在 Spring Boot 中使用 Log4J2 复合配置

Spring Boot 2.0下配置Log4j2下的错误问题分析与解决

如何使用 Spring Boot 设置 log4j2 自定义附加程序?