Logback是由log4j创始人设计的另外一个开源日志组件。目前主要有如下三个组件java
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"></timestamp>
<!-- 定义常量属性 -->
<property name="name" value="recommend_web"></property>
<property name="CONSOLE_LOG_PATTERN" value="%-4relative [%thread] %-5level %logger{35} - %msg %n"></property>
<!-- 配置上下文名称 -->
<contextName>${name}</contextName>
<!-- 输出到控制台 -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<!-- 格式化日志内容 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern></pattern>
</encoder>
</appender>
<!-- 把日志添加到文件 -->
<appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
<!-- 被写入的文件名,能够是相对目录,也能够是绝对目录,没有默认值 -->
<file>F:\logs\test.log</file>
<!-- true-日志追加到文件结尾,false-清空现存文件,默认为true -->
<append>true</append>
<!-- 对日志内容格式化 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
<!-- true-日志安全的写入文件,效率低,默认为false -->
<prudent>false</prudent>
</appender>
<!-- 滚动记录文件 -->
<appender name="rollingAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>F:\rollLog\logFile.log</file>
<!--
TimeBasedRollingPolicy</font>:根据时间制定滚动策略
-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档文件格式 -->
<fileNamePattern>
logFile.%d{yyyy-MM-dd}.log
</fileNamePattern>
<!-- 归档文件最大数量 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!--
SizeBasedTriggeringPolicy:根据文件制定滚动策略
-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<!-- 活动文件大小,若是超过当前大小,则触发滚动,默认为10MB -->
<maxFileSize>5MB</maxFileSize>
</rollingPolicy>
<!--
FixedWindowRollingPolicy:根据固定窗口算法制定滚动策略
-->
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 活动文件大小,若是超过当前大小,则触发滚动,默认为10MB -->
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
<!-- 归档文件格式,必须包含%i,表示当前文件索引 -->
<fileNamePattern>
logFile.%d{yyyy-MM-dd}.log
</fileNamePattern>
</rollingPolicy>
<!-- 告知 RollingFileAppender 什么时候激活滚动,跟FixedWindowRollingPolicy搭配使用 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<!-- 设置大小,跟TimeBasedRollingPolicy搭配使用,表示按日期、文件大小记录日志,文件名引用%i表示索引 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
<!-- 级别过滤器,根据日志级别进行过滤 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 设置过滤级别 -->
<level>ERROR</level>
<!-- 用于配置符合过滤条件的操做 -->
<onMatch>ACCEPT</onMatch>
<!-- 用于配置不符合过滤条件的操做 -->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 临界值过滤器,过滤掉低于指定临界值的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 设置过滤级别 -->
<level>ERROR</level>
</filter>
</appender>
<!-- 定义日志文件异步输出 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,若是队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>512</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="rollingAppender"/>
</appender>
<!--
用来设置某一个包或具体某一个类的日志打印级别,能够有多个logger配置
level:指定级别,不写则继承上级的级别
addtivity:是否向上级logger传递打印信息,默认为true
-->
<logger name="com.log.controller.LogController" level="INFO" addtivity="false">
<!-- 输出源,能够有多个,引用appender标签的name -->
<appender-ref ref="fileAppender"/>
</logger>
<!-- logger根元素,是全部logger元素的上级,只有一个level属性,默认为DEBUG -->
<root level="INFO">
<appender-ref ref="consoleAppender"/>
</root>
</configuration>
复制代码
Logback输出日志是从子节点开始,子节点若是有输出源直接输出,若是无,判断配置的addtivity,是否像上级传递,便是否向root传递,传递则采用root的输出源,不然不输出日志。
若是logger采用root的输出源,则根root的level无关,好比:logger的level为INFO,root的level为ERROR,若是日志打印为info级别日志,也同样会打印出来,向上级传递只是使用root节点的输出源。web
<!-- name表示当前的环境,能够配置多个,好比test-测试 prod-生产 -->
<springProfile name="dev">
<logger name="com.log.controller.LogController" level="INFO" addtivity="false">
<appender-ref ref="fileAppender"/>
</logger>
<root level="INFO">
<appender-ref ref="consoleAppender"/>
</root>
<springProfile>
复制代码