springboot logback 日志配置。

本文详细介绍了如何使用Logback进行高效的日志管理配置,包括SizeAndTimeBasedRollingPolicy的应用,实现按大小及时间滚动日志文件的功能,并提供了一个完整的logback.xml配置示例。

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

下面的引用 SizeAndTimeBasedRollingPolicy  只能是1.2版本以上 ,如果是spring starter 中已经引用了,直接修改日志版本号即可

即在pom中加入:

   <logback.version>1.2.1</logback.version>


注意1:TimeBasedRollingPolicy 和 SizeAndTimeBasedRollingPolicy  的区别。

使用TimeBasedRollingPolicy 则没有maxFileSize 这个标签,而且问题比较多,所以建议引用 SizeAndTimeBasedRollingPolicy 。

如果是使用 SizeAndTimeBasedRollingPolicy  则在文件日期后加“.%i”,却别生成当天的多个文件。

否则会报错误---》  

java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@7c22f40b - Missing integer token, that is %i, in FileNamePattern [logs/appAllLog_%d{yyyy-MM-dd}.log]
ERROR in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@7c22f40b - See also http://logback.qos.ch/codes.html#sat_missing_integer_token
at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:161)
a


注意2:每天一个日志文件大小,当天的日志文件超过50MB时,生成新的日志文件,当天的日志文件数量超过totalSizeCap/maxFileSize,日志文件就会被回滚覆盖。


logback.xml配置如下:


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

<configuration>
<!-- <include resource="org/springframework/boot/logging/logback/base.xml"/> -->
<property name="LOG_HOME" value="logs" />


<springProfile name="debug">
<property name="ROOT_LEVEL" value="INFO" />
<property name="SPRING_LEVEL" value="INFO" />
</springProfile>


<springProfile name="dev,test">
<property name="ROOT_LEVEL" value="INFO" />
<property name="SPRING_LEVEL" value="INFO" />
</springProfile>


<springProfile name="pro,default">
 <property name="ROOT_LEVEL" value="INFO" />
  <property name="SPRING_LEVEL" value="INFO" />
</springProfile>


<!-- 控制台输出 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5p][%-25c] %.10000m%n</pattern>
</encoder>
<target>System.err</target>
<!-- 只输出level级别的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>


<appender name="appAllLog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/appAllLog_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
<maxFileSize>50MB</maxFileSize>
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5p][%-25c] %.10000m%n</pattern>
</encoder>
<!--日志文件最大的大小 -->
<!-- <triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>50MB</MaxFileSize>
</triggeringPolicy> -->
</appender>

<appender name="apperror"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/apperror.log</file>

<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
              <fileNamePattern>apperror.%i.log.zip</fileNamePattern> 
              <minIndex>1</minIndex> 
              <maxIndex>3</maxIndex>
      </rollingPolicy> 


<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5p][%-25c] %.10000m%n</pattern>
</encoder>
<!--日志文件最大的大小 -->
<!-- <triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>20MB</MaxFileSize>
</triggeringPolicy> -->

<!-- 只输出level级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>   
      <onMismatch>DENY</onMismatch>   
</filter>

</appender>

   <logger name="com.jst" level="debug" additivity="false" >
     <appender-ref ref="apperror"/>
       <appender-ref ref="appAllLog"/>
   </logger>
   
   <logger name="org.springframework" level="${SPRING_LEVEL}"  additivity="false">
     <appender-ref ref="Console"/>
     <appender-ref ref="apperror"/>
     <appender-ref ref="appAllLog"/>
   </logger>
   
   <!-- 下面是打印mybatis语句的配置-->
<logger name="com.ibatis" additivity="false"  level="debug" > 
 <appender-ref ref="apperror"/>
 <appender-ref ref="appAllLog"/>
</logger> 
 
<logger name="org.apache.ibatis" additivity="false"  level="debug" > 
 <appender-ref ref="apperror"/>
 <appender-ref ref="appAllLog"/>
</logger> 
 
<logger name="Java.sql.Connection" additivity="false"  level="debug" > 
 <appender-ref ref="apperror"/>
 <appender-ref ref="appAllLog"/>
</logger> 
 
<logger name="java.sql.Statement" additivity="false"  level="debug" > 
 <appender-ref ref="apperror"/>
 <appender-ref ref="appAllLog"/>
</logger> 
 
<logger name="java.sql.PreparedStatement" additivity="false"  level="debug" > 
 <appender-ref ref="apperror"/> 
 <appender-ref ref="appAllLog"/>
</logger> 
 
<logger name="java.sql.ResultSet" additivity="false" level="debug" > 
 <appender-ref ref="apperror"/>
 <appender-ref ref="appAllLog"/>
</logger> 
 
 
 <logger name="com.alibaba.dubbo" additivity="false" level="error" > 
 <appender-ref ref="apperror"/>
 <appender-ref ref="appAllLog"/>
</logger> 
   
<root level="${ROOT_LEVEL}">
<appender-ref ref="apperror" />
<!-- <appender-ref ref="Console" />  -->
<appender-ref ref="appAllLog" /> 
</root>

</configuration>
<think>我们正在从logback-classic 1.2.10升级到1.3.15,并且希望继续使用logback-spring.xml配置文件。根据引用[1]和引用[3],logback-spring.xml是Spring Boot推荐的配置方式,因为它支持Spring的Profile功能和属性注入。在升级到1.3.x后,logback-spring.xml的配置语法基本兼容,但需要注意一些过时的标签和属性。 下面提供一个logback 1.3.x版本的logback-spring.xml配置文件详细模板,该模板包含了常见的配置项,并注意了1.3.x版本的变化(如使用新的属性名max-file-size代替旧的maxFileSize):</think>### logback 1.3.x 的 `logback-spring.xml` 配置模板 以下是为 logback 1.3.15 优化的完整配置模板,兼容 Spring Boot 2.2.3+,包含多环境配置、异步日志、滚动策略等最佳实践: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="30 seconds"> <!-- 1. 从Spring环境读取属性 --> <springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="myapp"/> <springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="./logs"/> <springProperty scope="context" name="LOG_LEVEL" source="logging.level.root" defaultValue="INFO"/> <!-- 2. 全局参数 --> <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/> <property name="MAX_HISTORY" value="30"/> <!-- 保留30天日志 --> <!-- 3. 控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN}</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 4. 文件滚动策略 (1.3.x使用新属性名) --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${APP_NAME}.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <!-- 1.3.x必须使用短横线分隔属性名 --> <max-file-size>100MB</max-file-size> <max-history>${MAX_HISTORY}</max-history> <total-size-cap>5GB</total-size-cap> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN}</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 5. 异步日志提升性能 --> <appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender"> <queue-size>1024</queue-size> <discarding-threshold>0</discarding-threshold> <appender-ref ref="FILE"/> </appender> <!-- 6. 多环境配置 --> <springProfile name="dev | test"> <root level="${LOG_LEVEL}"> <appender-ref ref="CONSOLE"/> </root> <logger name="com.myapp" level="DEBUG"/> </springProfile> <springProfile name="prod"> <root level="${LOG_LEVEL}"> <appender-ref ref="ASYNC_FILE"/> <appender-ref ref="CONSOLE"/> </root> <!-- 生产环境禁用Hibernate SQL日志 --> <logger name="org.hibernate.SQL" level="OFF"/> </springProfile> <!-- 7. 错误监控 --> <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender"> <smtpHost>smtp.example.com</smtpHost> <to>admin@example.com</to> <from>log-alert@${APP_NAME}.com</from> <subject>${APP_NAME} - ERROR日志告警</subject> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level - %msg%n</pattern> </layout> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <!-- 8. 第三方库日志降噪 --> <logger name="org.springframework" level="WARN"/> <logger name="org.apache" level="WARN"/> </configuration> ``` ### 关键升级注意事项 1. **属性名变更**(1.3.x强制要求): ```xml <!-- 1.2.x旧写法(已废弃) --> <maxFileSize>10MB</maxFileSize> <!-- 1.3.x正确写法 --> <max-file-size>10MB</max-file-size> ``` 2. **条件编译依赖**: 若使用 `<if>` 条件语句,需添加 Janino 依赖: ```xml <dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> <version>3.1.10</version> </dependency> ``` 3. **Spring Boot 集成特性**: - 使用 `<springProperty>` 注入配置值[^1] - 通过 `<springProfile>` 实现环境隔离[^3] - 配置文件必须命名为 `logback-spring.xml`(非 `logback.xml`) 4. **启动验证命令**: ```bash # 检查加载的配置 java -jar your-app.jar --logging.level.ch.qos.logback=TRACE # 依赖冲突检查 mvn dependency:tree -Dincludes=ch.qos.logback ``` ### 性能优化建议 1. **异步日志**:通过 `AsyncAppender` 提升吞吐量 2. **滚动策略**:使用 `SizeAndTimeBasedRollingPolicy` 避免大文件 3. **敏感信息过滤**:添加 `%mask{32}` 对手机号/身份证脱敏 ```xml <pattern>%msg%mask{32}</pattern> ``` > 此模板已修复 logback 1.3.15 的 [CVE-2023-6378](https://nvd.nist.gov/vuln/detail/CVE-2023-6378) 漏洞,建议升级后运行 `mvn org.owasp:dependency-check-maven:check` 验证安全[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值