property:使用property标签集中管理的属性,比如定义日志的输出格式
<property name="pattern" value="[%-5level] == [%thread]== %d{yyyy-MM-dd HH:mm:ss.SSS} == %c == %M %m%n{50}"/>
1、控制台输出
定义一个appender标签,类型为ConsoleAppender,然后定义日志输出的格式就行了
<configuration>
<!--配置集中管理的属性-->
<!--
日志输出格式:
%-5level 日志级别
%d{yyyy-MM-dd HH:mm:ss.SSS} 日期
%c 类的完整名称
%M 方法名method
%L 行号
%thread 线程名称
%m或者%msg 为信息
%n 换行
-->
<property name="pattern" value="[%-5level] == [%thread]== %d{yyyy-MM-dd HH:mm:ss.SSS} == %c == %M %m%n{50}"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 控制输出流对象 默认System.out 可以通过<target></target> 修改其他如System.err -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern> ${pattern}</pattern>
</encoder>
</appender>
<!--
<loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性
用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
name:
用来指定受此logger约束的某一个包或者具体的某一个类。
level:
用来设置打印级别,大小写无关:TRACE,DEBUG,INFO,WARN,ERROR,ALL和 oFF,如果未设置此属性,那么当前logger将会继承上级的级别。
additivity :
是否向上级logger传递打印信息。默认是true,
<logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger
root也是<logger>元素,但是它是根logger。默认debug
level:用来设置打印级别,大小写无关:TRACE,DEBUG,INFO,WARN,ERROR,ALL和OFF,<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger,
-->
<root level="INFO">
<appender-ref ref="console"/>
</root>
</configuration>
2、输出日志到文件
定义appender标签类型为FileAppender,使用file标签指定文件的输出路径
<configuration>
<property name="pattern" value="[%-5level] == [%thread]== %d{yyyy-MM-dd HH:mm:ss.SSS} == %c == %M %m%n{50}"/>
<!-- 定义日志文件保存的路径 -->
<property name="log_path" value="./logs"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 控制输出流对象 默认System.out 可以通过<target>System.err</target> 修改 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern> ${pattern}</pattern>
</encoder>
</appender>
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>${log_path}/logback.log</file>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</configuration>
3、日志的拆分归档压缩
定义appender标签类型为RollingFileAppender,使用rollingPolicy 指定拆分的策略
<configuration>
<property name="pattern" value="[%-5level] == [%thread]== %d{yyyy-MM-dd HH:mm:ss.SSS} == %c == %M %m%n{50}"/>
<!-- 定义日志文件保存的路径 -->
<property name="log_path" value="./logs"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 控制输出流对象 默认System.out 可以通过<target>System.err</target> 修改 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern> ${pattern}</pattern>
</encoder>
</appender>
<!-- 日志拆分和归档压缩 -->
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 指定拆分的规则 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 按照时间格式输出的文件名 -->
<fileNamePattern>${log_path}/%d{yyy-MM-dd}-roll_logback%i.log</fileNamePattern>
<!--保存为压缩格式-->
<!--<fileNamePattern>${log_path}/%d{yyy-MM-dd}-roll_logback%i.log.gz</fileNamePattern>-->
<!--将大于10MB的日志文件拆分 %i就是用来区分拆分的日志文件的-->
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="rollFile"/>
</root>
</configuration>
给appender指定过滤器,实现细粒度的筛选
<!-- 日志拆分和归档压缩 -->
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 指定拆分的规则 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 按照时间隔压缩格式声明拆分的文件名 -->
<fileNamePattern>${log_path}/%d{yyy-mm-dd}-roll_logback%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
<!-- 日志级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--日志过滤规则-->
<level>ERROR</level>
<!--拦截ERROR日志-->
<onMatch>ACCEPT</onMatch>
<!--其他级别日志放行-->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
异步记录日志,提高性能
<!-- 异步日志 -->
<appender name="async" class="ch.qos.logback.classic.AsyncAppender">
<!-- 指定一个具体的appender -->
<appender-ref ref="rollFile"/>
</appender>