记录日志的主要用途之一就是为了在有问题的时候能够方便的查找问题原因,但有时日志太多也会造成大量的磁盘空间占用,所以需要进行合适的日志存储配置。
一个可行的办法就是针对不同的日志类型,配置单独的日志存储策略,包括文件名,滚动策略以及最大日志数量。
1. 定义日志输出文件
<!-- 业务日志输出 -->
<appender name="biz_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/biz_info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/biz-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志保留最大 60个 -->
<maxHistory>60</maxHistory>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
maxHistory: 参数表示保留日志文件的最大个数
{yyyy-MM-dd}: 参数表示按天分割文件,{yyyy-MM-dd-HH}表示按小时分割文件。因为时间格式化出来的字符串和之前的字符串不相同,则重新生成一个文件。此时生成文件名中,还需要增加-%i
cleanHistoryOnStart:设置为true,表示启动的时候清除多余的日志。
<!-- 业务日志输出 -->
<appender name="biz_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/biz_info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/biz-info.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<!-- 日志保留最大 60个 -->
<maxHistory>60</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
timeBasedFileNamingAndTriggeringPolicy:按文件大小进行切分。
2. 定义logger
<!--业务日志-->
<logger name="biz_info" level="info" additivity="false">
<appender-ref ref="biz_info"/>
</logger>
additivity="false"表示这里的日志不写入root对应的logger。
3. 定义logger变量
private static final Logger log = LoggerFactory.getLogger("biz_info");
需要记录日志的类,定义logger变量。
4. 记录日志
log.info("列表显示");
按照正常的方式记录日志即可。