一、配置文件基本结构图:
1、appender定义写日志的组件
2、logger用于设置某一个包或者类的日志打印级别,以及指定appender,可以不设置,则默认走root
3、root是根logger,只有一个level属性
二、配置文件详解:
<!-- scan设置为true时,配置文件修改会重新加载,默认为true,检测周期scanPeriod为60秒,没有给出时间单位,默认为毫秒; -->
<!-- debug属性设置为true时,将打印logback内部日志,实时查看logback运行状态,默认为false -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- property用来定义变量,key/value格式,插入上下文中,可以通过${}来获取 -->
<property name="LOG_HOME" value="${catalina.home}/logs" /> <!-- 定义日志文件根路径 -->
<!-- ConsoleAppender将日志打印到控制台的组件 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder> <!-- 对日志信息格式化 -->
<pattern>project:<6>:%5level, %M\(%F %L\), %d{yyyy-MM-dd_HH:mm:ss}, %msg%n
</pattern>
</encoder>
</appender>
<!-- name 日志组件名称 -->
<!-- RollingFileAppender 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<!-- rollingPolicy 当发生滚动时,决定 RollingFileAppender的行为,涉及文件移动和重命名
TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动
FixedWindowRollingPolicy: 根据固定窗口算法重命名文件的滚动策略 -->
<appender name="MyAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/project-info.log</file> <!-- 当前日志文件名称 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/project-info.log.%d{yyyy-MM-dd-HH}
</fileNamePattern>
<maxHistory>0</maxHistory>
</rollingPolicy>
<encoder>
<pattern>project:<6>:%5level, loginOpt, %d{yyyy-MM-dd_HH:mm:ss}, %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level> <!-- 取值INFO/DEBUG/WARN/ERROR -->
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- triggeringPolicy: 告知 RollingFileAppender 合适激活滚动
SizeBasedTriggeringPolicy: 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动 -->
<appender name="MyAppender2"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/project-info.log</file> <!-- 当前日志文件名称 -->
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_HOME}/wm-info.log.%d{yyyy-MM-dd-HH}.zip</fileNamePattern>
<minIndex>1</minIndex> <!-- 窗口索引最小值 -->
<maxIndex>3</maxIndex> <!-- 窗口索引最大值,当用户指定的窗口过大时,会自动将窗口设置为12。 -->
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level> <!-- 取值INFO/DEBUG/WARN/ERROR -->
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="perfAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/project-perf.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/project-perf.log.%d{yyyy-MM-dd}
</fileNamePattern>
<maxHistory>0</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<!-- Perf4j最重要的appender就是AsyncCoalescingStatisticsAppender,它会把一段时间内StopWatch的信息汇总到一个独立的GroupedTimingStatistics日志信息,
然后把这个独立的信息传给下游的appenders,比如perfAppender,这样就可以写到文件中去 -->
<appender name="CoalescingStatistics"
class="org.perf4j.logback.AsyncCoalescingStatisticsAppender">
<appender-ref ref="perfAppender" />
<param name="TimeSlice" value="10000"/> <!-- 配置多少时间间隔去做一次汇总写入文件中,默认值是 30000 ms -->
</appender>
<logger name="org.perf4j.TimingLogger" level="INFO" additivity="false">
<level value="INFO"/>
<appender-ref ref="CoalescingStatistics" />
</logger>
<!-- name 指定受此logger约束的一个包或者具体类 -->
<!-- level 设置打印级别,可选,如果未设置则强行继承上级的level -->
<!-- addtivity 是否向上级传递打印信息,默认为true -->
<!-- appender-ref 指定引用的日志组件 -->
<logger name="org.springframework" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="MyAppender" />
<appender-ref ref="MyAppender2" />
</logger>
<root level="warn">
<appender-ref ref="STDOUT" />
<appender-ref ref="MyAppender" />
<appender-ref ref="MyAppender2" />
</root>
</configuration>
三、logback依赖jar包: