LogBack介绍
Logback是由log4j创始人设计的另一个开源日志组件。目前主要有以下三个组件
- logback-core:基础模块
- logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
- logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能
官方网站
配置介绍
<?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节点的输出源。
springboot下logback配置
官方推荐使用的xml名字的格式为:logback-spring.xml而不是logback.xml,至于为什么,因为带spring后缀的可以使用<springProfile>这个标签。通过springProfile标签,可以让日志在不同的环境下打印不同的日志。比如可以通过包裹logger和root标签,示例如下:
<!-- 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>
复制代码