logback.xml文件配置(按时间、文件大小和log名称生成日志

本文详细介绍如何在项目中配置Logback,实现按时间、文件大小和日志名称生成日志。包括Maven依赖配置、logback.xml配置,以及如何设置日志文件的存储、滚动策略、过滤器等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

logback.xml文件配置(按时间、文件大小和log名称生成日志)

添加Maven依依赖

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>1.7.25</version>
</dependency>
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
	<version>1.2.3</version>
</dependency>
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-core</artifactId>
	<version>1.2.3</version>
</dependency>

配置logback.xml

在项目根目录下创建src/main/resourse包,然后创建logback.xml,具体配置如下:

<?xml version="1.0" encoding="UTF-8"?>
 
<!--
    scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
    scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
    debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
    <property name="LOG_HOME" value="D:/logback" />
    <!-- 控制台输出 -->
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
        <encoder> 
            <!-- %.-1level 只显示信息级别的首字母,%-5level 左对齐显示信息级别全称 --> 
            <Pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] --%mdc{client} %msg%n</Pattern> 
        </encoder> 
    </appender> 
    <!-- 每天生成日志文件,文件大小超过50则新生成一个文件,同时将旧文件按${LOG_HOME}/logs/aa.%d{yyyy-MM-dd}.%i.log.zip格式压缩,文件保存30天 -->
    <appender name="AA" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
        <file>${LOG_HOME}/aa.log</file> <!-- 日志名称 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 
            <fileNamePattern>${LOG_HOME}/logs/aa.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern> 
            <maxFileSize>50MB</maxFileSize>  <!-- 日志文件过大会使的编辑器打开非常慢,因此设置日志最大50MB -->
            <maxHistory>30</maxHistory>  <!-- 保存30天 -->
            <totalSizeCap>10GB</totalSizeCap>  <!-- 总日志大小 -->
        </rollingPolicy> 
        <!-- encoder负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。 -->
        <encoder> 
            <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n</pattern> 
        </encoder> 
        <!-- 过滤器,可以过滤掉不符合条件的日志,INFO及以上的日志被处理,其它的拒绝 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
            <level>INFO</level> 
            <onMatch>ACCEPT</onMatch> 
            <onMismatch>DENY</onMismatch> 
        </filter> 
    </appender>
 
 
    <appender name="BB" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
        <file>${LOG_HOME}/bb.log</file> 
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 
            <fileNamePattern>${LOG_HOME}/logs/bb.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern> 
            <maxFileSize>50MB</maxFileSize> 
            <maxHistory>30</maxHistory> 
            <totalSizeCap>10GB</totalSizeCap> 
        </rollingPolicy> 
        <encoder> 
            <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n</pattern> 
        </encoder> 
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
            <level>INFO</level> 
            <onMatch>ACCEPT</onMatch> 
            <onMismatch>DENY</onMismatch> 
        </filter> 
    </appender>
     
     
    <appender name="update" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
        <file>${LOG_HOME}/update.log</file> 
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 
            <fileNamePattern>${LOG_HOME}/logs/update.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern> 
            <maxFileSize>50KB</maxFileSize> 
            <maxHistory>7</maxHistory> 
            <totalSizeCap>10GB</totalSizeCap> 
        </rollingPolicy> 
        <encoder> 
            <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n</pattern> 
        </encoder> 
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
            <level>INFO</level> 
            <onMatch>ACCEPT</onMatch> 
            <onMismatch>DENY</onMismatch> 
        </filter> 
    </appender>
    <!-- java项目中com.example.demo包下通过LoggerFactory.getLogger(Demo.class)获取的日志全部由AA appender处理 -->
    <logger name="com.example.demo" additivity="false">
        <appender-ref ref="AA" />
    </logger>
    <!-- java项目中com.example.demo包下通过LoggerFactory.getLogger(Demo2.class)获取的日志全部由BB appender处理 -->
     <logger name="com.example.demo.bb">
        <appender-ref ref="BB" />
    </logger>
    <!-- java项目中任意类中通过LoggerFactory.getLogger("update")获取的日志全部由update appender处理 ,
        例如想把所有的更新操作的日志放在一起,便于查看
    -->
    <logger name="update" >
        <appender-ref ref="update" />
    </logger>
    <!-- 根日志,所有logger默认继承自root,打印信息向上级传递,所以以上logger所打印的日志默认被 STDOUT appender再处理一遍,
        也就是会被打印到控制台,可以再通过设置logger的additivity="false",使得不再向上传递
    -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
    </root>
     
</configuration>

原文链接 https://www.cnblogs.com/hhhshct/p/9084036.html

<think>我们参考提供的引用内容,特别是引用[1][2]中关于logback配置文件的加载顺序配置方式。用户的问题是:logback.xml配置了server.log生成到指定位置。我们需要考虑以下几个方面:1.配置文件的加载:确保logback.xml被正确加载(引用[2]中提到加载顺序)。2.配置文件的正确性:检查logback.xml中关于文件路径的配置是否正确。3.运行环境:检查运行环境的文件权限、磁盘空间等。解决方案步骤:第一步:确认配置文件被加载-根据引用[2],logback加载配置文件的顺序为:1)系统属性logback.configurationFile指定的文件2)classpath下的logback.groovy3)classpath下的logback-test.xml4)classpath下的logback.xml-因此,我们需要确保我们的logback.xml文件在classpath下,且没有被其他配置文件覆盖。-为了验证,我们可以启动时添加JVM参数:-Dlogback.configurationFile=绝对路径/logback.xml,并观察日志输出情况。-或者,我们可以在logback.xml中增加一个调试配置,例如设置<rootlevel="DEBUG">,然后在控制台查看logback启动时输出的内部状态信息。logback默认会在初始化时打印内部状态信息,包括加载的配置文件配置详情。第二步:检查配置文件内容-确保在logback.xml中正确配置了FileAppender,并指定了文件路径。例如:<appendername="SERVER_FILE"class="ch.qos.logback.core.FileAppender"><file>指定的路径/server.log</file><encoder><pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern></encoder></appender>然后将其添加到rootlogger或指定的logger中。-注意:文件路径可以是绝对路径或相对路径。相对路径是相对于应用程序的当前工作目录。建议使用绝对路径以避免歧义。第三步:检查运行环境-确认应用程序对指定的目录有写入权限。-确认磁盘空间是否充足。-如果运行在容器中(如Tomcat),注意容器的工作目录。第四步:查看logback内部状态-启用logback的状态信息输出,在logback.xml的<configuration>标签中添加<statusListenerclass="ch.qos.logback.core.status.OnConsoleStatusListener"/>,这样logback会输出详细的内部状态信息,有助于诊断问题。第五步:考虑使用SpringBoot的配置(如果适用)-如果项目是SpringBoot项目,注意SpringBoot默认使用logback,但它的配置文件logback-spring.xml(放在src/main/resources下),并且可以通过springProperty设置路径。第六步:检查配置中是否有条件判断-引用[1]中提到logback支持条件判断(if-then-else),检查配置文件中是否有条件判断导致配置未生效。示例配置(部分):```xml<configuration><!--启用状态监听器,输出内部状态信息--><statusListenerclass="ch.qos.logback.core.status.OnConsoleStatusListener"/><!--定义一个文件appender--><appendername="SERVER_FILE"class="ch.qos.logback.core.FileAppender"><!--使用绝对路径指定文件位置--><file>/var/log/myapp/server.log</file><encoder><pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern></encoder></appender><!--将文件appender添加到rootlogger--><rootlevel="INFO"><appender-refref="SERVER_FILE"/></root></configuration>```注意:如果配置文件中有多个appender,确保正确引用了这个appender。最后,如果问题仍然存在,可以查看是否有I/O异常,引用[1]中提到logback能够从I/O异常中恢复,但启动时如果文件路径错误可能导致无法创建文件。通过以上步骤,通常可以定位问题。如果还是不行,建议查看logback的官方文档或社区支持。相关问题:1.如何调试logback配置文件?2.logback配置文件中如何定义不同的环境(如开发、测试)?3.在SpringBoot中如何使用logback?4.logback如何配置日志文件的滚动策略?</think> ### 解决 logback.xml 配置 server.log生成到指定位置的问题 以下是完整解决方案,逐步排查问题原因: #### 🛠️ 1. **验证配置有效性** ```xml <!-- 确保文件路径使用绝对路径 --> <appender name="SERVER_FILE" class="ch.qos.logback.core.FileAppender"> <!-- 错误示例:相对路径可能导致歧义 --> <!-- <file>logs/server.log</file> --> <!-- 正确示例:明确指定绝对路径 --> <file>/data/logs/server.log</file> <!-- 编码器配置 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> ``` - **关键点**: - 相对路径`logs/server.log`会输出到**应用工作目录**(如 Tomcat 的 `bin/`),需改用绝对路径 - 配置后添加状态监听器:`<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>` 查看内部报错 [^2] #### 🔍 2. **检查配置文件加载顺序** 根据引用[2],加载优先级: 1. JVM参数指定:`-Dlogback.configurationFile=/conf/my-logback.xml` 2. Classpath中的 `logback.groovy` > `logback-test.xml` > `logback.xml` **检查点**: - 是否存在同名高优先级配置文件覆盖了`logback.xml` - 启动命令是否包含`-Dlogback.configurationFile` 参数 #### 📂 3. **验证目录权限路径存在性** ```bash # Linux系统检查示例 $ ls -ld /data/logs # 检查目录是否存在 $ touch /data/logs/test.log # 测试写入权限 $ echo $? # 返回0表示成功 ``` **故障排除**: - 目录不存在时自动创建:添加`<prudent>true</prudent>` 参数 - Docker环境需映射宿主机路径:`docker run -v /host/logs:/container/logs ...` #### ⚙️ 4. **Appender引用验证** ```xml <!-- 确保Appender正确关联到Root --> <root level="INFO"> <appender-ref ref="SERVER_FILE" /> <!-- 名称需一致 --> <appender-ref ref="CONSOLE" /> </root> ``` **常见错误**: - `appender-ref` 名称拼写错误 - 多环境配置中`<if>`条件触发了错误分支 #### 🧪 5. **检测配置自动重载** ```xml <!-- 开启配置文件扫描 --> <configuration scan="true" scanPeriod="30 seconds"> ``` 修改配置后观察是否自动生效(控制台输出`Reloaded logback config`) #### 🔄 6. **冲突检测(Spring Boot特有)** 若使用 Spring Boot: 1. 删除`application.properties`中的日志路径配置 2. 排除默认配置: ```java @SpringBootApplication(exclude = {LogbackLoggingSystem.class}) ``` #### 📌 总结排查流程 | 步骤 | 检查项 | 工具/方法 | |------|-------------------------|------------------------------| | 1 | 文件路径是否为绝对路径 | 配置审计 + 状态监听器 | | 2 | 配置文件加载优先级 | 检查JVM参数 + classpath | | 3 | 目录权限存在性 | `ls + touch`命令测试 | | 4 | Appender引用链完整性 | 配置逐行审查 | | 5 | 多环境条件判断 | 临时禁用`<if>`条件块 | | 6 | 框架冲突 | 排除Spring Boot默认配置 | **最终建议**:在开发环境添加配置: ```xml <!-- 开启详细错误日志 --> <configuration debug="true"> ... </configuration> ``` 通过控制台输出的`Logback internal status`精确锁定错误位置 [^1][^3]。 ### 📚 相关问题 1. **如何在日志文件名中使用日期滚动?** (使用`RollingFileAppender + TimeBasedRollingPolicy`) 2. **Logback 如何实现开发/生产环境不同配置?** (通过`<if condition=>` ` <then> </then>`条件块) 3. **日志文件权限错误如何自动修复?** (结合`File.createNewFile()`检测 + 告警机制) 4. **Spring Boot 如何覆盖默认 Logback 配置?** (通过 `logging.file.name` 属性优先级解析) [^1]: logback 配置优势:支持条件判断自动重载 [^2]: 配置文件加载顺序决定实际生效配置 [^3]: Appender 的类型参数直接影响输出位置有效性 [^4]: 第三方组件(如 Nacos)可能干扰日志路径,需检查叠加配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值