logback配置!
先上配置代码:
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true"> <!-- 日志级别 --> <property name="log.root.level" value="INFO"/> <!-- 其他日志级别 --> <property name="log.other.level" value="DEBUG"/> <!-- 模块名称, 影响日志配置名,日志文件名 --> <property name="log.moduleName" value="game"/> <!--日志文件的保存路径,首先查找系统属性-Dlog.dir,如果存在就使用其;否则,在当前目录下创建名为logs目录做日志存放的目录 --> <property name="log.base" value="${log.dir:-logs}/${log.moduleName}"/> <property name="log.max.size" value="1MB"/> <!-- 日志文件大小,超过这个大小将被压缩 --> <!-- 彩色日志 --> <!-- 彩色日志依赖的渲染类 --> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/> <!-- 彩色日志格式 --> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr([%8.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}} "/> <property name="CONSOLE_LOG_PATTERN_X" value="%clr(%d{HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr([%8.15t]){faint} %yellow(at %class.%method) \\(%file:%line\\) %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> <property name="CONSOLE_LOG_PATTERN_XX" value="%clr(%d{HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([%8.15t]){faint} %yellow(at %class.%method) \\(%file:%line\\) %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> <!-- 时间, 日志级别, 线程名 %clr([%8.15t]) --> <property name="CONSOLE_LOG_PATTERN_XXX" value="%clr(%d{HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([%8.15t]){faint} %cyan(%clr(%-40.40logger{50}.%method)){cyan}\\(%file:%line\\) %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> <!--控制台输出 --> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}) - %highlight(%msg) %n</pattern>--> <pattern>${CONSOLE_LOG_PATTERN_XXX}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- 用来保存输出所有级别的日志 --> <appender name="file.all" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 设置日志不超过${log.max.size}时的保存路径,注意如果是web项目会保存到Tomcat的bin目录 下 --> <File>${log.base}/${log.moduleName}.log</File> <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${log.base}/archive/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip</FileNamePattern> <!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${log.max.size}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 日志输出的文件的格式 --> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{80}.%method:%L -%msg%n</pattern> </layout> </appender> <!-- 这也是用来保存输出所有级别的日志 --> <appender name="file.all.other" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>${log.base}/${log.moduleName}_other.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${log.base}/archive/${log.moduleName}_other_%d{yyyy-MM-dd}.%i.log.zip </FileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${log.max.size}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L -%msg%n</pattern> </layout> </appender> <!-- 只用保存输出error级别的日志 --> <appender name="file.error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>${log.base}/${log.moduleName}_err.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern> ${log.base}/archive/${log.moduleName}_err_%d{yyyy-MM-dd}.%i.log.zip </FileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!--达到上限压缩 单个文件大小限制--> <maxFileSize>${log.max.size}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--cleanHistoryOnStart:true登录清理默认false --> <cleanHistoryOnStart>true</cleanHistoryOnStart> <!--日志文件保留1天 注:maxHistory不为0 totalSizeCap才会生效--> <maxHistory>1</maxHistory> <!--日志文件大小(KB MB GB)--> <!-- <totalSizeCap>50KB</totalSizeCap>--> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern> </layout> <!-- 下面为配置只输出error级别的日志 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --> <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --> <!-- 添加附加的appender,最多只能添加一个 --> <appender name="file.async" class="ch.qos.logback.classic.AsyncAppender"> <discardingThreshold>0</discardingThreshold> <queueSize>256</queueSize> <includeCallerData>true</includeCallerData> <appender-ref ref="file.all"/> </appender> <!-- 使用异步来记录其他信息--> <appender name="file.async.other" class="ch.qos.logback.classic.AsyncAppender"> <discardingThreshold>0</discardingThreshold> <queueSize>256</queueSize> <includeCallerData>true</includeCallerData> <appender-ref ref="file.all.other"/> </appender> <!-- 为某个包下的所有类的指定Appender 这里也可以指定类名称例如:com.aa.bb.ClassName --> <logger name="com.lin" additivity="false"> <level value="${log.root.level}"/> <appender-ref ref="stdout"/> <appender-ref ref="file.async"/><!-- 即com.lin包下级别为 ${log.root.level}的才会使用file.async来打印 --> <appender-ref ref="file.error"/> </logger> <!-- root将级别为${log.root.level}及大于${log.root.level}的日志信息交给已经配置好的名为“Console”的appender处理,“Console”appender将信息打印到Console,其它同理 --> <root level="${log.root.level}"> <appender-ref ref="stdout"/> <!-- 标识这个appender将会添加到这个logger --> <!-- <appender-ref ref="file.async.other"/>--> <appender-ref ref="file.error"/> </root> </configuration>
推荐一个链接,讲的非常仔细:https://www.cnblogs.com/xrq730/p/8628945.html
这里我强调以下三个属性:
cleanHistoryOnStart:默认是false;作用是启动时检测maxHistory和totalSizeCap配置
totalSizeCap:不能单独存在,必须maxHistory不为0时,才会生效
maxHistory:可以单独存在。定义日志留存时间(天)
例1:
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<maxHistory>1</maxHistory>
启动检测:删除一天前得日志,如果现在时19号,那么将会删除17号及以前得日志!
例2
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<maxHistory>1</maxHistory>
<totalSizeCap>50KB</totalSizeCap>
启动检测:删除一天前得日志,如果现在时19号,那么将会删除17号及以前得日志!19号得日志如果超过50KB得部分也会删除,保留最近得50kb大小以内得日志
以上两种情况均不配置<cleanHistoryOnStart>true</cleanHistoryOnStart>,则默认位false,即开机不会删除,只在运行时出发
manven配置:
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>2.7.0</version> </dependency>
网上关于manven得包版本冲突得解决办法有很多,idea下直接使用插件Maven Helper比较方便,大家自行百度使用方式吧,很简单!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!