最近在調整自己開發的系統的 log。程式使用 Spring Boot,log 使用 logback。
我的目的是要讓其 log 到一定量就自動壓縮成 .gz
檔、每天壓縮。
原先我的寫法是:
<?xml version="1.0"?>
<configuration>
<timestamp key="timestamp" datePattern="yyyy-MM-dd"/>
<property name="default_pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %msg %n" />
<property name="log_path" value="logs" />
<appender name="LOG" class="ch.qos.logback.core.FileAppender">
<file>${log_path}/system-${timestamp}.log</file>
<encoder>
<pattern>${default_pattern}</pattern>
</encoder>
</appender>
<!-- 中間 <logger> 省略 -->
<root level="ERROR"/>
</configuration>
然後參考其他人的,改成
<?xml version="1.0"?>
<configuration>
<timestamp key="timestamp" datePattern="yyyy-MM-dd"/>
<property name="default_pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %msg %n" />
<property name="log_path" value="logs" />
<appender name="LOG" class="ch.qos.logback.core.FileAppender">
<file>${log_path}/system.log</file>
<encoder>
<pattern>${default_pattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>{log_path}/system-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- 中間 <logger> 省略 -->
<root level="ERROR"/>
</configuration>
但是,卻會報出如下錯誤
ERROR in ch.qos.logback.core.joran.spi.Interpreter@29:18 - no applicable action for [maxFileSize]
根據我在網路上的資料,這錯誤是因為<rollingPolicy>
的設定是 logback 的插件,而 spring 在掃瞄 logback 設定檔時間較早,導致插件無法讀取,進而出現錯誤(不過其實真正的原因我也不是很確定就是)。
要修改就得改成
<?xml version="1.0"?>
<configuration>
<timestamp key="timestamp" datePattern="yyyy-MM-dd"/>
<property name="default_pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread][%-5level][%logger{36}] %msg %n" />
<property name="log_path" value="logs" />
<!-- appender class 從 FileAppender 改成 RollingFileAppender -->
<appender name="LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log_path}/system.log</file>
<encoder>
<pattern>${default_pattern}</pattern>
</encoder>
<!-- 下面照舊 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log_path}/system-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- 中間 <logger> 省略 -->
<root level="ERROR"/>
</configuration>
參考資料
Chen, K. (2022, October 21). 六角鼠年鐵人賽 Week 13 - Spring Boot - 一次搞懂 LogBack 設定. HackMD. Retrieved August 12, 2024, from https://hackmd.io/@KaiChen/B1MjzutuL
疯狂攻城师. (2021, November 29). SpringBoot深度解析-04Springboot日志Logging_Logging.Pattern.Level. CSDN博客. Retrieved August 12, 2024, from https://blog.csdn.net/lijunliang2017/article/details/121607999
fatih. (2022, January 22). RE: ERROR in ch.qos.logback.core.joran.spi.Interpreter- no applicable action for [maxHistory]. Stack Overflow. Retrieved August 12, 2024, from https://stackoverflow.com/a/70860583
沒有留言:
張貼留言