Spring Boot RollingFileAppender 创建文件但不附加任何内容

Spring Boot RollingFileAppender makes file but not appending anything

我正在使用 VScode 通过 WSL 连接到 Ubunut 来构建 SpringBoot 项目。一切正常。现在我正在尝试将日志记录添加到我的项目中,下面的 logback-spring.xml 是我用作配置的内容。到目前为止,我可以看到它有效。我看到控制台打印,它甚至在我想要的路径中生成 logback.log 文件。但是,文件似乎总是空的。我尝试在这里和那里添加更多记录器,但我看到的只是 ConsoleAppender 的控制台输出。

<!--Logfile save path-->
<property name="LOGS_PATH" value="./logs"/>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
    </layout>
</appender>
<appender name="SAMPLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender>
<appender name="DAILY_ROLLING_FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOGS_PATH}/logback.log</file>
    <encoder>
        <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOGS_PATH}/logback.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!-- or whenever the file size reaches 100MB -->
            <maxFileSize>5MB</maxFileSize>
            <!-- kb, mb, gb -->
        </timeBasedFileNamingAndTriggeringPolicy>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
</appender>
<logger name="com.qcells.olap" level="DEBUG">
    <appender-ref ref="SAMPLE" />
</logger>
<logger name="com.qcells.olap" level="INFO">
    <appender-ref ref="DAILY_ROLLING_FILE_APPENDER" />
</logger>
<root level="INFO">
    <appender-ref ref="STDOUT" />
</root>

在 java 代码中,我这样使用 Logger:(Rx_Client2 只是包含此代码的 class 的名称)

private Logger logger = LoggerFactory.getLogger(Rx_Client2.class);        
logger.info("success");

我相信这是制作日志数据的简单方法,我在控制台上看到打印出“成功”消息。

我试图删除 logback.log 文件,当我 运行 项目时它会重新生成 logback.log 文件,但里面仍然没有任何内容。 任何解决方案? 提前致谢!

根据您发布的 logback-spring.xml,您定义了三个附加程序。标准输出、样本和 DAILY_ROLLING_FILE_APPENDER。第一个 STDOUT 分配给根记录器

<root level="INFO">
  <appender-ref ref="STDOUT" />
</root>

因此,当您将某些内容记录到

时,您会在控制台看到一个日志
private Logger logger = LoggerFactory.getLogger(Rx_Client2.class);

因为日志消息在记录器的层次结构中向上传播,直到它到达根记录器并且消息被附加到它的附加程序处理。

其他两个 appender 附加到特定的记录器。

<logger name="com.qcells.olap" level="DEBUG">
    <appender-ref ref="SAMPLE" />
</logger>
<logger name="com.qcells.olap" level="INFO">
    <appender-ref ref="DAILY_ROLLING_FILE_APPENDER" />
</logger>

Rx_Client2.class 是否在 com.qcells.olap 下面的包裹中?

因此,只有位于“com.qcells.olap”下方的记录器的日志才会记录到您的滚动文件中。如果您希望所有日志都记录到文件中,您必须将其附加到根记录器,如 STDOUT 附加程序。

<root level="INFO">
  <appender-ref ref="STDOUT" />
  <appender-ref ref="DAILY_ROLLING_FILE_APPENDER" />
</root>