Java Logback教程
今天仔细配置了一下Logback,之前都是直接从网上找一下,今天仔细研究了一下。首先简单配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<springProperty scope="context" name="logLevel" source="logBack.level"/>
<springProperty scope="context" name="logPath" source="logBack.path"/>
<springProperty scope="context" name="logName" source="logBack.name"/>
<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />
<!-- 控制台输出 -->
<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] %-5level %logger{50}:%L - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${logPath}/${logName}.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>180</MaxHistory>
<MaxFileSize>500MB</MaxFileSize>
<!--重启清理日志文件-->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
</encoder>
</appender>
<!-- 生成html格式日志结束 -->
<!-- 每天生成一个html格式的日志开始 -->
<appender name="FILE_HTML"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${logPath}/${logName}.%d{yyyy-MM-dd}.%i.html
</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>180</MaxHistory>
<MaxFileSize>500MB</MaxFileSize>
<!--重启清理日志文件-->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder
class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%p%d%msg%M%F{32}%L</pattern>
</layout>
</encoder>
</appender>
<!-- 每天生成一个html格式的日志结束 -->
<!--myibatis log configure -->
<logger name="com.apache.ibatis" level="DEBUG" />
<logger name="java.sql.Connection" level="DEBUG" />
<logger name="java.sql.Statement" level="DEBUG" />
<logger name="java.sql.PreparedStatement" level="DEBUG" />
<!-- 日志输出级别 -->
<root level="${logLevel}">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="FILE_HTML" />
</root>
</configuration>
然后日志级别的区分如下:
fileNamePattern 值及其作用说明
fileNamePattern | 展期时间表 | 例 |
---|---|---|
/wombat/foo.%d | 每日滚动(在午夜)。由于省略了%d令牌说明符的可选时间和日期模式,因此采用了默认模式yyyy-MM-dd,它对应于每日滚动。 | 未设置文件属性:在2006年11月23日,日志记录输出将进入文件 /wombat/foo.2006-11-23。在午夜以及24日的其余时间,日志记录输出将定向到 /wombat/foo.2006-11-24。文件属性设置为 /wombat/foo.txt:在2006年11月23日,日志输出将转到文件/wombat/foo.txt。在午夜,foo.txt将重命名为 /wombat/foo.2006-11-23。将创建一个新的 /wombat/foo.txt文件,并在11月24日的其余时间将日志输出定向到 foo.txt。 |
/wombat/%d{yyyy/MM}/foo.txt | 在每个月初进行过渡。 | 未设置文件属性:在2006年10月,日志记录输出将进入 /wombat/2006/10/foo.txt。在10月31日午夜之后和11月下旬,日志记录输出将定向到/wombat/2006/11/foo.txt。文件属性设置为 /wombat/foo.txt:活动日志文件将始终为 /wombat/foo.txt。在2006年10月,日志记录输出将转到/wombat/foo.txt。在10月31日午夜,/ wombat/foo.txt将重命名为/wombat/2006/10/foo.txt。将创建一个新的 /wombat/foo.txt文件,该日志文件将在11月下旬输出。在11月30日午夜,/ wombat / foo.txt将重命名为 /wombat/2006/11/foo.txt,依此类推。 |
/wombat/foo.%d{yyyy-ww}.log | 在每周的第一天进行过渡。请注意,一周的第一天取决于语言环境。 | 与以前的情况类似,不同的是,过渡将在每个新的星期开始时进行。 |
/wombat/foo%d{yyyy-MM-dd_HH}.log | 每小时顶部滚动一次。 | 与以前的情况类似,除了过渡将在每小时的顶部进行。 |
/wombat/foo%d{yyyy-MM-dd_HH-mm}.log | 每分钟开始时进行翻转。 | 与以前的情况类似,除了在每分钟的开始发生翻转。 |
/ wombat / foo%d {yyyy-MM-dd_HH-mm,UTC} .log | 每分钟开始时进行翻转。 | 与以前的情况类似,除了文件名将以UTC表示。 |
/ foo /%d {yyyy-MM,aux } /%d.log | 每天滚动。存档位于包含年和月的文件夹下。 | 在此示例中,第一个%d令牌被标记为 辅助 iliary。然后假定第二个%d令牌是主要令牌,其中省略了时间和日期模式。因此,过渡将每天发生一次(%d的默认设置),并且文件夹名称将取决于年份和月份。例如,在2006年11月,归档文件将全部放在/ foo / 2006 |
然后今天主要测试了一下rollingPolicy节点下用ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy类和TimeBasedRollingPolicy类的MaxFileSize,MaxHistory的作用:
MaxFileSize:这个参数决定了单个log日志的大小,如果是ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy类,那就会在达到这个值得时候进行切分。但是如果用的是TimeBasedRollingPolicy类那么达到这个值之后,就不再写入日志,这点是比较坑的。
MaxHistory:这个值代表的是周期的概念,刚开始看各种文章有的说是代表保存日志的最多的天数,有的说是保存的文件个数,然后看了下官网,官网在SizeAndTimeBasedRollingPolicy和TimeBasedRollingPolicy类之下的时候的解释是Size and time based archiving supports deletion of old archive files. You need to specify the number of periods to preserve with the maxHistory property. When your application is stopped and restarted, logging will continue at the correct location, i.e. at the largest index number for the current period.然后经过我测试之后,发现这个表示的是周期。即在fileNamePattern 参数配置的如果是按照天进行分割,那这个的数量就表示是N天,如果fileNamePattern 配置的是分钟,那这个就表示N分钟。然后这个数量不能用类似3*30这种表达,必须直接用90表达。
参考:https://zhuanlan.zhihu.com/p/70595392
http://logback.qos.ch/manual/appenders.html#rfaRollingPolicy
https://blog.csdn.net/SIMBA1949/article/details/90718200
https://blog.csdn.net/u012723183/article/details/107685109