<?xml version="1.0" encoding="UTF-8"?>
<!--
scan 属性:默认为true表示如果配置文件被更改,将重新加载
scanPeriod属性:设置监测配置文件是否有修改的时间间隔,格式 数值+单位(默认单位 毫秒),当且仅当scan属性为true时,此属性有效
debug属性:当设置为true时,将打印出logback内部日志信息。默认为false
-->
<configuration scan="true" scanPeriod="1 seconds" debug="false">
<!--变量设置 -->
<property name="LOG_FILE" value="/log/tomcat/myJOb/myJOb.error.log" />
<property name="appName" value="myJOb"/>
<!-- 设置上下文名称 -->
<contextName>${appName}</contextName>
<!-- 获取时间戳字符串
属性key:用来标识此timestamp的名字
属性datePattern:将当前日期转成字符串的格式,和SimpleDateFormat一致
-->
<timestamp key="byDate" datePattern="yyyyMMdd" />
<!-- OutputStreamAppender 其他appender基于该appender提供的一些基础服务构建。用户通常不直接实例化该appender。 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- FileAppender(OutPutStreamAppender的子类):将日志写入 文件。目标文件由file子节点来指定,如果文件已经存在,则根据append节点的值来判断是追加还是截断 -->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${LOG_FILE}</file>
<!-- 默认为true 即在文件的末尾追加 -->
<append>true</append>
<!-- 默认情况下,每个日志事件都会立即刷新基础输出流。但是有时为了提高日志吞吐量,可以把该属性设置为false -->
<immediateFlush>true</immediateFlush>
<!-- encoder 对记录件进行格式化
encoder 负责将日志事件转换成一个字节数组,并写入outputStream。encoder是在0.9.19版本引入的,在此之前所有的appender依靠一个layout将事件转换成String,并把String通过输出字符流写出。
在之前的版本logback版本中,用户需要在FileAppender中内嵌一个PatternLayout。0.9.19之后,fileAppender和它的子类都是使用encoder
layout只能将事件转换为字符串,此外layout无法控制何时写入,与此相比,encoder不仅可以完全控制要写出的字节的格式,还可以控制何时(以及是否)可以写出这些字节
目前 PatternLayoutEncoder 是唯一真正有用的编码器
pattern子节点:用来控制日志的输入格式。%+转换符
-->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<!--
appender是configuration中负责写日志的组件
name属性:标识
class属性:指定appender的全限定性名称
分类:
1.consoleAppender 把日志添加到控制台
2.FileAppender:把日志添加到文件
3.RollingFileAppender:滚动式记录日志到文件中。先将日志记录到指定文件中,当达到某个条件时,将日志记录到其他文件中
-->
<!-- RollingFileAppender
一个RollingFileAppender必须包含RollingPolicy和TriggerPolicy.当然 如果RollingPolicy也实现了TriggeringPolicy,
那么只需要设置RollingPolicy就行了,典型的代表SizeAndTimeBasedRollingPolicy
file 子节点:被写入的文件名可以是相对,也可以是绝对目录,如果不存在,则自动创建,没有默认值
append子节点:参考fileAppend的该属性
encoder子节点:参考outputStreamAppender的该属性
rollingPolicy节点:当翻转发生时,RollingFileAppender将做什么
triggeringPolicy:将确定是否以及何时发生翻转
prudent子节点(boolean类型):谨慎模式。RollingFileAppender支持谨慎模式。在TimeBasedRollingPolicy中使用谨慎模式有两个限制
1.在谨慎模式中,不支持或不允许文件压缩
2.file属性不能被设置,或者说必须留空
-->
<appender name="fileRolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE}</file>
<!-- rollingPolicy子节点
当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类
-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--必要节点, 属性定义已滚动(已归档)日志文件的名称。他的值应该包含文件名,以及适当放置的%d转换说明符, -->
<fileNamePattern>${LOG_FILE}-%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<!--可选节点。控制要保留的最大归档文件数,以异步形式删除较旧的文件。例如如果您指定了每月滚动,并将 maxHistory设置为6,则将保留留个月的归档文件,并删除6个月以上的归档文件-->
<maxHistory>15</maxHistory>
<!-- 保存文件的大小,超出则创建新的文件 -->
<maxFileSize>100MB</maxFileSize>
<!--可选节点 属性控制所有归档文件的总大小,当超过总大小上限时,最早的档案将被异步删除,设置该属性时,必须保证maxHistory属性也被设置了 -->
<totalSizeCap>1GB</totalSizeCap>
<!--boolean 类型 如果设置为true,则将在appender程序启动时执行归档删除(默认为false) -->
<cleanHistoryOnStart></cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!--
logger:用来指定某一个包或者某一个类的日志打印级别
name属性:指定的包或者类
level属性:打印级别设置(大小写无关)TRACE、DEBUG、INFO、WARN、ERROR、ALL、OFF
additivity属性:是否向上级logger传递打印信息,默认为true
appender-ref子节点设置(可以有多个):表示这个logger将会应用到相应的appender
-->
<logger name="org.springframework" level="INFO" additivity="true"></logger>
<!-- root 特殊的logger只有一个level属性,可以包含一个或多个appender-ref子节点 -->
<root level="WARN">
<appender-ref ref="STDOUT" />
<appender-ref ref="fileRolling" />
</root>
</configuration>