logback无法删除太久远的日志文件?logback删除日志文件源码分析

logback无法删除太久远的日志文件?logback删除日志文件源码分析

最近发现logback配置滚动日志,但是本地日志文件甚至还有2年前的日志文件,服务器是却是正常的!
网上搜索了一波没有发现,只找到说不能删除太久远的旧日志文件
在这里插入图片描述

我的配置

<!--    基于时间和空间的滚动日志,单个文件最大10MB,保留天数最大30天,所以日志保留最大空间是20GB    -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>/root/demo/logs/hornet_%d{yyyyMMdd}.%i.log</fileNamePattern>
    <maxFileSize>10mb</maxFileSize>
    <maxHistory>30</maxHistory>
    <totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>

下面是源码分析

从配置可以看出,可以从 SizeAndTimeBasedRollingPolicy.class 着手

package ch.qos.logback.core.rolling;

import ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP.Usage;
import ch.qos.logback.core.util.FileSize;



public class SizeAndTimeBasedRollingPolicy<E> extends TimeBasedRollingPolicy<E> {
   
   

    FileSize maxFileSize;
    
    @Override
    public void start() {
   
   
        SizeAndTimeBasedFNATP<E> sizeAndTimeBasedFNATP = new SizeAndTimeBasedFNATP<E>(Usage.EMBEDDED); 
        if(maxFileSize == null) {
   
   
            addError("maxFileSize property is mandatory.");
            return;
        } else {
   
   
            addInfo("Archive files will be limited to ["+maxFileSize+"] each.");
        }
        
        sizeAndTimeBasedFNATP.setMaxFileSize<
<think>我们正在讨论如何在JacORB中使用logback.xml配置文件来设置日志级别和输出。由于JacORB使用SLF4J作为日志门面,我们可以通过配置SLF4J的底层实现(这里使用Logback)来实现。 根据引用[1]中提到的日志输出方式(如控制台、文件等),我们可以使用Logback的配置元素来定义。Logback的配置文件通常命名为logback.xml,并放置在类路径下(如src/main/resources)。 以下是一个配置示例,该配置文件将设置: 1. 根日志级别为INFO 2. 针对JacORB的包(org.jacorb)设置DEBUG级别(以便获取更多JacORB的调试信息) 3. 输出到控制台和文件,并设置文件滚动策略(每产生一个日志文件,并保留30日志) 注意:Logback的配置语法与Log4j类似,但有些不同。 配置文件logback.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定义控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 定义文件输出,使用DailyRollingFileAppender(每滚动) --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/jacorb.log</file> <!-- 设置滚动策略,每滚动一次 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 每滚动,文件格式为:logs/jacorb.log.2024-06-15 --> <fileNamePattern>logs/jacorb.log.%d{yyyy-MM-dd}</fileNamePattern> <!-- 保留30日志 --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 设置日志级别 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> <!-- 单独设置JacORB的日志级别为DEBUG --> <logger name="org.jacorb" level="DEBUG" /> </configuration> ``` ### 配置说明: 1. **控制台输出**:使用`ConsoleAppender`,输出格式通过`<pattern>`定义。 2. **文件输出**:使用`RollingFileAppender`,并配置按时间滚动(每一个文件),保留30日志。 3. **根日志级别**:设置为`INFO`,这意味着所有INFO及以上级别的日志都会被记录(除非有更具体的日志器设置)。 4. **JacORB专用设置**:通过`<logger name="org.jacorb" level="DEBUG">`将`org.jacorb`包及其子包的日志级别设置为`DEBUG`,这样我们可以获取JacORB内部的详细日志。 ### 部署配置文件: 将上述`logback.xml`文件放在项目的类路径下(例如Maven项目的`src/main/resources`目录)。当应用启动时,SLF4J会自动加载Logback并应用该配置。 ### 依赖配置: 确保项目中包含SLF4J和Logback的依赖(Maven配置示例): ```xml <dependencies> <!-- SLF4J API --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <!-- Logback实现 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies> ``` ### 验证配置: 在代码中,我们可以通过以下方式获取日志记录器并输出日志,以验证配置是否生效: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JacORBLogTest { private static final Logger logger = LoggerFactory.getLogger(JacORBLogTest.class); private static final Logger jacorbLogger = LoggerFactory.getLogger("org.jacorb.example"); public static void main(String[] args) { // 根日志器级别为INFO,所以DEBUG消息不会在根日志中显示 logger.debug("这是一条调试消息 - 不会显示"); logger.info("这是一条普通信息消息 - 会显示"); // 针对org.jacorb包的日志器,级别为DEBUG,所以DEBUG消息会显示 jacorbLogger.debug("JacORB调试消息 - 会显示"); } } ``` ### 注意事项: - 如果JacORB项目已经使用了其他日志框架(如JDK Logging),需要排除其相关依赖,确保SLF4J绑定到Logback。 - 日志文件路径`logs/jacorb.log`是相对于当前工作目录的。如果目录不存在,Logback会自动创建。 通过以上配置,我们可以灵活地控制JacORB的日志输出,满足不同的调试和记录需求。 §§相关问题§§ 1. 如何配置Logback以限制单个日志文件的大小并同时按日期滚动? 2. 在JacORB中,如何将不同模块的日志输出到不同的文件? 3. 如何通过系统属性动态指定Logback配置文件的位置?</think>### JacORB 配置 logback.xml 设置日志级别和输出 在 JacORB 中通过 `logback.xml` 配置文件设置日志级别和输出,需遵循 SLF4J + Logback 的标准配置方式。以下是完整的配置指南: #### 1. 创建 logback.xml 配置文件 在项目资源目录下创建 `src/main/resources/logback.xml` 文件: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="30 seconds"> <!-- 控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- JacORB 专用文件日志 --> <appender name="JACORB_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/jacorb.log</file> <!-- 按滚动日志 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/jacorb.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> <!-- 保留30日志 --> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- JacORB 包日志设置 --> <logger name="org.jacorb" level="DEBUG" additivity="false"> <appender-ref ref="JACORB_FILE" /> <appender-ref ref="CONSOLE" /> </logger> <!-- 根日志设置 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration> ``` #### 2. 关键配置说明 1. **日志级别设置**: ```xml <logger name="org.jacorb" level="DEBUG" /> ``` - `DEBUG`: 显示详细调试信息(可替换为 TRACE/INFO/WARN/ERROR) - `org.jacorb`: JacORB 专用日志命名空间 2. **输出目标**: - `ConsoleAppender`: 控制台输出 - `RollingFileAppender`: 文件输出(带滚动策略) 3. **日志滚动策略**: ```xml <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/jacorb.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> ``` 每生成新日志文件,保留最近30日志[^1] #### 3. Maven 依赖配置 确保 `pom.xml` 包含 SLF4J + Logback 依赖: ```xml <dependencies> <!-- SLF4J API --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency> <!-- Logback 实现 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> </dependency> <!-- JacORB 核心依赖 --> <dependency> <groupId>org.jacorb</groupId> <artifactId>jacorb</artifactId> <version>3.9</version> </dependency> </dependencies> ``` #### 4. 动态验证配置 创建测试类验证日志配置: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JacORBLogTest { private static final Logger logger = LoggerFactory.getLogger("org.jacorb.config"); public static void main(String[] args) { // 测试不同级别日志输出 logger.trace("TRACE 消息 - 通常不可见"); logger.debug("DEBUG 消息 - JacORB 调试信息"); logger.info("INFO 消息 - JacORB 运行状态"); logger.warn("WARN 消息 - 潜在问题警告"); logger.error("ERROR 消息 - 严重错误事件"); // 验证日志包过滤 Logger otherLogger = LoggerFactory.getLogger("com.other.package"); otherLogger.info("其他包日志 - 应遵循根日志设置"); } } ``` #### 5. 配置生效说明 1. **日志级别优先级**: ``` TRACE < DEBUG < INFO < WARN < ERROR ``` - 设置 `DEBUG` 将显示 DEBUG 及以上级别日志 - `additivity="false"` 阻止日志向上传递到根日志器 2. **动态加载**: - `scan="true" scanPeriod="30 seconds"` 支持运行时修改配置自动重载 - 修改日志级别无需重启应用 3. **输出位置**: - 控制台:即时查看调试信息 - 文件日志:`logs/jacorb.log`(自动按日期滚动) 此配置可精细控制 JacORB 日志行为,通过调整 `level` 属性和 `appender` 配置,满足从开发调试到生产监控的不同需求[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值