工作中自己搭建了一个springboot项目,整合了mybatis和链接oracle数据库ojdbc,JDK版本是1.7。为了更好的维护项目,需要配置日志输出,我采用的是logback日志,通过搜索相关信息,自己研究了一套日志输出配置,经过测试可以使用。
注:自己技术还不够,有问题的地方请大牛不吝指教。
这套配置的日志输出会按日志级别(TRACE < DEBUG < INFO < WARN < ERROR < FATAL)在不同级别的文件夹下输出日志,并且会按天进行日志切割,每个日志文件最大是50MB(超出会删除旧数据),切割后的日志数量是30个(超出会删除旧日志文件)。每个文件夹下面的日志总大小为2GB(每个日志文件的大小*日志数量 <= 总大小),超出大小会删除旧数据。
注意:日志总大小好像只可以使用整数,我配置了1.5GB后启动会抛异常。
下面是具体的日志XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds" debug="false">
<contextName>logback</contextName>
<!-- 配置日志输出路径(注:放到服务器上后记得更改路径) -->
<property name="log.split.path" value="F:\\log-test\\" />
<!-- 配置日志名称 -->
<property name="log.path" value="logback.log" />
<!-- 配置切割后的debug日志输出路径 -->
<property name="log.debug.path" value="debug" />
<!-- 配置切割后的info日志输出路径 -->
<property name="log.info.path" value="info" />
<!-- 配置切割后的warn日志输出路径 -->
<property name="log.warn.path" value="warn" />
<!-- 配置切割后的error日志输出路径 -->
<property name="log.error.path" value="error" />
<!-- 配置日志文件最大数量 -->
<property name="log.file.max.num" value="30" />
<!-- 配置日志文件大小最大值 -->
<property name="log.file.max.size" value="50MB" />
<!-- 配置总日志文件大小最大值 -->
<property name="log.file.total.max.size" value="2GB" />
<!-- 输出到控制台 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 配置debug级别日志 -->
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置日志级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>debug</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 配置日志存放路径 -->
<file>${log.split.path}${log.debug.path}/${log.path}</file>
<!-- 配置日志切割器 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 配置日志切割策略:每天切割 -->
<fileNamePattern>${log.split.path}${log.debug.path}/log_debug_back.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 配置日志数量 -->
<maxHistory>${log.file.max.num}</maxHistory>
<!-- 配置单个日志大小的最大值 -->
<maxFileSize>${log.file.max.size}</maxFileSize>
<!-- 配置总日志大小的最大值 -->
<totalSizeCap>${log.file.total.max.size}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 配置info级别日志 -->
<appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置日志级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 配置日志存放路径 -->
<file>${log.split.path}${log.info.path}/${log.path}</file>
<!-- 配置日志切割器 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 配置日志切割策略:每天切割 -->
<fileNamePattern>${log.split.path}${log.info.path}/log_info_back.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 配置日志数量 -->
<maxHistory>${log.file.max.num}</maxHistory>
<!-- 配置单个日志大小的最大值 -->
<maxFileSize>${log.file.max.size}</maxFileSize>
<!-- 配置总日志大小的最大值 -->
<totalSizeCap>${log.file.total.max.size}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 配置warn级别日志 -->
<appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置日志级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 配置日志存放路径 -->
<file>${log.split.path}${log.warn.path}/${log.path}</file>
<!-- 配置日志切割器 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 配置日志切割策略:每天切割 -->
<fileNamePattern>${log.split.path}${log.warn.path}/log_warn_back.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 配置日志数量 -->
<maxHistory>${log.file.max.num}</maxHistory>
<!-- 配置单个日志大小的最大值 -->
<maxFileSize>${log.file.max.size}</maxFileSize>
<!-- 配置总日志大小的最大值 -->
<totalSizeCap>${log.file.total.max.size}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 配置error级别日志 -->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置日志级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 配置日志存放路径 -->
<file>${log.split.path}${log.error.path}/${log.path}</file>
<!-- 配置日志切割器 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 配置日志切割策略:每天切割 -->
<fileNamePattern>${log.split.path}${log.error.path}/log_error_back.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 配置日志数量 -->
<maxHistory>${log.file.max.num}</maxHistory>
<!-- 配置单个日志大小的最大值 -->
<maxFileSize>${log.file.max.size}</maxFileSize>
<!-- 配置总日志大小的最大值 -->
<totalSizeCap>${log.file.total.max.size}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日志级别:TRACE < DEBUG < INFO < WARN < ERROR < FATAL -->
<root level="info">
<!-- 控制台日志 -->
<appender-ref ref="console" />
<!-- 按级别输出到对应文件 -->
<appender-ref ref="debug" />
<appender-ref ref="info"/>
<appender-ref ref="warn"/>
<appender-ref ref="error" />
</root>
</configuration>
上面就是我研究的日志配置了,关于XML每个标签的作用就不作解释了,想了解的可以很容易搜索到相关信息。