Patten参数说明
logback.cml
<?xml version="1.0" encoding="utf-8"?>
<!-- configuration:子节点:appender,logger,root
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
scanPeriod:检测文件修改时间间隔,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
packagingData:数据打包,开启可能会影响性能,默认关闭
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false" packagingData="false">
<!--每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。
一旦设置,不能修改。可以通过%contextName/$cn来打印日志上下文名称,一般来说不用这个属性,可有可无-->
<contextName>MyApp</contextName>
<!-- property:定义key,value键值对
name的值是变量的名称,value的值时变量定义的值。定义变量后,可以使“${变量名}”来使用变量。
定义变量也可用variable
-->
<property name="patten_simple" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} | %msg%n"/>
<variable name="patten" value="%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n"/>
<!--key:名字,datePattern:当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式-->
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<!-- appender:无默认值,appender的具体实现类。常用的有 ConsoleAppender、FileAppender、RollingFileAppender
ConsoleAppender:用于在屏幕上输出日志,只要定义好encoder节点就可以使用
FileAppender:向文件输出日志内容,由于没有日志滚动策略,一般很少使用
RollingFileAppender:向文件输出日志内容,同时可以配置日志文件滚动策略,在日志达到一定条件后生成一个新的日志文件。
-->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!--常用的过滤器
LevelFilter:根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志
<level>:设置过滤级别
<onMatch>:用于配置符合过滤条件的操作
<onMismatch>:用于配置不符合过滤条件的操作
ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;
当日志级别低于临界值时,日志会被拒绝。
EvaluatorFilter: 求值过滤器,评估、鉴别日志是否符合指定条件。需要额外的两个JAR包,commons-compiler.jar和janino.jar
-->
<!-- 定义了一个过滤器,在LEVEL之下的日志输出不会被打印出来,用当前appender输出日志的时候都会经过这个过滤器 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!--这里定义了DEBUG,也就是控制台不会输出比DEBUG级别小的日志-->
<level>DEBUG</level>
</filter>
<!--定义控制台输出格式-->
<!-- encoder:负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。目前PatternLayoutEncoder 是唯一有用的且默认的encoder
<pattern>:用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“\%”进行转义。
-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--<pattern>${patten}</pattern>-->
<pattern>${patten_simple}</pattern>
</encoder>
</appender>
<appender name="file" class="ch.qos.logback.core.FileAppender">
<!--被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值-->
<file>testFile.log</file>
<!--如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true-->
<append>true</append>
<!--如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。-->
<prudent>false</prudent>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<!--RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
<appender name="fileRolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--定义日志输出的路径-->
<!--这里的scheduler.manager.server.home 没有在上面的配置中设定,所以会使用java启动时配置的值-->
<!--比如通过 java -Dscheduler.manager.server.home=/path/to XXXX 配置该属性-->
<file>logs/rollingFile.log</file>
<!--定义日志滚动的策略,决定 RollingFileAppender 的行为,涉及文件移动和重命名-->
<!-- triggeringPolicy:
TimeBasedRollingPolicy:最常用的滚动策略,根据时间来制定滚动策略,既负责滚动也负责触发滚动
<fileNamePattern>:包含文件名及“%d”转换符, “%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。
<maxHistory>:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。
FixedWindowRollingPolicy:根据固定窗口算法重命名文件的滚动策略。
<minIndex>:窗口索引最小值
<maxIndex>:窗口索引最大值,当用户指定的窗口过大时,会自动将窗口设置为12
<fileNamePattern >:必须包含“%i”例如,假设最小值和最大值分别为1和2,命名模式为 mylog%i.log,会产生归档文件mylog1.log和mylog2.log
SizeBasedTriggeringPolicy:查看当前活动文件的大小,如果超过指定大小会告知 RollingFileAppender 触发当前活动文件滚动。只有一个节点
<maxFileSize>:这是活动文件的大小,默认值是10MB。
-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--定义文件滚动时的文件名的格式-->
<fileNamePattern>
<!--${scheduler.manager.server.home}/logs/${app.name}.%d{yyyy-MM-dd.HH}.log.gz-->
logs/rollingFile.%d{yyyy-MM-dd.HH}.log.zip
</fileNamePattern>
<!--根据fileNamePattern确定单位,此例60小时-->
<maxHistory>60</maxHistory>
<!--日志量最大20GB,该属性在 1.1.6版本后 才开始支持-->
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<!-- 告知 RollingFileAppender 何时激活滚动-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<!--每个日志文件最大100MB-->
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<!--定义输出格式-->
<encoder>
<pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
</encoder>
<!--当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,
1不支持也不允许文件压缩,2不能设置file属性,必须留空-->
<!--<prudent>false</prudent>-->
</appender>
<!--root是默认的logger 这里设定输出级别是debug-->
<root level="这里设定输出级别是debug">
<!--定义了两个appender,日志会通过往这两个appender里面写-->
<appender-ref ref="stdout"/>
<appender-ref ref="fileRolling"/>
<!--<appender-ref ref="file"/>-->
</root>
<!--
logger:仅有一个name属性,一个可选的level和一个可选的addtivity属性
name:用来指定受此loger约束的某一个包或者具体的某一个类
level:大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
如果未设置此属性,那么当前loger将会继承上级的级别
-->
<!--对于以类方式获取log的如:LoggerFactory.getLogger(ClassName.class),若name设置为包名,则对该包下所有类生效
输出级别设置为warn,并且只输出到控制台-->
<!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
<logger name="com.example.logback" level="warn"/>
<!-- 通过 LoggerFactory.getLogger("mytest") 可以获取到这个logger
additivity:表示是否使用rootLogger配置的appender进行输出,false则不适用
由于这个logger自动继承了root的appender,root中已经有stdout的appender了,自己这边又引入了stdout的appender
如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况
-->
<logger name="mytest" level="info" additivity="false">
<!--logger可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger-->
<appender-ref ref="stdout"/>
</logger>
<!--由于设置了 additivity="false" ,所以输出时不会使用rootLogger的appender-->
<!--但是这个logger本身又没有配置appender,所以使用这个logger输出日志的话就不会输出到任何地方-->
<logger name="mytest2" level="info" additivity="false"/>
</configuration>
logback多环境配置
<configuration>
<property name="patten_simple" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} | %msg%n"/>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- 定义了一个过滤器,在LEVEL之下的日志输出不会被打印出来,用当前appender输出日志的时候都会经过这个过滤器 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!--这里定义了DEBUG,也就是控制台不会输出比DEBUG级别小的日志-->
<level>DEBUG</level>
</filter>
<!--定义控制台输出格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--<pattern>${patten}</pattern>-->
<pattern>${patten_simple}</pattern>
</encoder>
</appender>
<!--多环境日志输出-->
<!-- 测试环境+开发环境. 多个使用逗号隔开. -->
<springProfile name="test,dev">
<logger name="com.example.demo" level="DEBUG" additivity="false">
<appender-ref ref="consoleLog"/>
</logger>
</springProfile>
<!-- 生产环境. -->
<springProfile name="prod">
<logger name="com.example" level="INFO" additivity="false">
<appender-ref ref="consoleLog"/>
</logger>
</springProfile>
</configuration>