logback配置详解

一,pom.xml导入依赖

<dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
</dependency>

二、添加配置文件: logback.xml

配置文件结点如下:
在这里插入图片描述
2.1:appender标签
appender组件主要负责打印日志,设置日志输出位置,日志文件的生成策略等
1)ConsoleAppender:把日志打印到控制台
2)FileAppender:把日志输出到文件
3)RollingFileAppender:滚动记录地把日志输出到文件,支持日志文件按时间或文件大小拆分

下面以打印控制台日志和打印debug日志的代码片段进行说明:

<!-- 控制台 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
    	<!--指定打印的格式->
        <encoder>
        	<!-- (%d表示时间格式)年月日时分秒毫秒+线程+日志级别+类路径+日志信息+换行-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>



<!-- DEBUG -->
    <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件存储路径 -->
        <file>${log.filePath}/debug.log</file>
        <!--通过TimeBasedRollingPolicy执行策略,按时间周期将日志文本文件以log.gz的方式进行存储-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 指定log.gz文件名称-->
            <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <!-- 文件最大保存历史数量 也就是当log.gz文件大于maxHistory时,执行滚动记录的策略-->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <!--日志打印格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--过滤器 将会过滤掉除debug级别以外的日志信息-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

2.2:logger标签
1)设置logger:用来设置某个包或某个指定类的日志打印级别,logger仅有一个name属性,一个可选的level和一个可选的addtivity属性。

  • name:指定受此logger约束的某个包或指定类
  • level:指定打印级别
  • additivity:是否向上级logger传递打印信息,默认true

2)设置root:只有一个level属性用于指定打印级别,默认debug

level和root之间的关系可以看作是java中的子类和父类,通过additivity属性进行继承

<!-- logger的additivity为true,也就是继承了root的属性,所以下列所有的appender除了打印自己的日志级别输出到日志文件以外,还会打印root指定的info级别输出到控制台-->
<logger name="com.whl.o2o" level="debug" additivity="true">
  <appender-ref ref="debugAppender"/>
  <appender-ref ref="infoAppender"/>
  <appender-ref ref="errorAppender"/>
</logger>
<!--root 指定日志打印级别为info -->	
<root level="info">
	<!-- 通过控制台打印 -->
    <appender-ref ref="consoleAppender"/>
</root>

2.3:过滤器
使用过滤器可以设置日志的传递.

  • onMatch表示匹配大于这个级别的日志
  • onMismatch表示匹配小于于这个级别的日志
    其属性值可以为:ACCEPT–打印
    DENY– 不打印
    NEUTRAL–中立
<filter class="ch.qos.logback.classic.filter.LevelFilter">
   <!--过滤器指定为error级别,大于error级别的日志打印,小于error级别的日志不打印-->
   <level>ERROR</level>
   <onMatch>ACCEPT</onMatch>
   <onMismatch>DENY</onMismatch>
</filter>

三,通过实例验证配置

3.1:logback.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- TRACE<DEBUG<INFO<WARN<ERROR -->

    <!-- 定义参数常量 -->
    <property name="log.level" value="debug" />
    <property name="log.maxHistory" value="30" />
    <property name="log.filePath" value="d:/tomcat9/logs/o2o_logs" />
    <property name="log.pattern"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
    <!-- 控制台设置 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!-- DEBUG -->
    <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名称 -->
            <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存历史数量 -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- INFO -->
    <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名称 -->
            <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存历史数量 -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- ERROR -->
    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名称 -->
            <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存历史数量 -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <logger name="com.whl.o2o" level="${log.level}" additivity="true">
        <appender-ref ref="debugAppender"/>
        <appender-ref ref="infoAppender"/>
        <appender-ref ref="errorAppender"/>
    </logger>
    <root level="info">
        <appender-ref ref="consoleAppender"/>
    </root>
</configuration>

3.2:测试类

public class BaseTest {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(BaseTest.class);
        //一般采用info记录方法的启动和结束
        logger.info("===start===");
        long startTime = System.currentTimeMillis();
        //一般在抛出的异常中打印error信息
        logger.error("test error");
        long endTime = System.currentTimeMillis();
        //一般debug用于记录用于调优的信息
        logger.debug("costTime:[{}ms]",endTime-startTime);
        logger.info("===end====");
    }
}

输出结果:
该日志输出格式为logback.xml中控制台日志输出设置指定的encoding格式

2019-07-30 17:41:43.033 [main] INFO com.whl.o2o.BaseTest - =start=
2019-07-30 17:41:43.039 [main] ERROR com.whl.o2o.BaseTest - test error
2019-07-30 17:41:43.045 [main] DEBUG com.whl.o2o.BaseTest - costTime:[6ms]
2019-07-30 17:41:43.053 [main] INFO com.whl.o2o.BaseTest - =end==

3.3:输出到配置文件的log
可以看到,通过logger和root之间的配置关系,我们不仅可以在指定的路径生成日志文本,也可以在控制台中进行日志的打印
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值