SpringBoot使用LogBack日志组件

2018-08-07  本文已影响0人  上进的小二狗

一、引言

SpringBoot内部集成了LogBack日志依赖,SpringBoot默认使用LogBack记录日志信息,默认根据base.xml配置内容来输出到控制台和文件之中。
本文将简单叙述如何使用 logback 日志。

二、操作

1、包结构展示如下

因为SpringBoot内部集成了LogBack所以我们不需要添加任何依赖,我们只需要创建一个新的空项目即可。

如图: 项目包结构图

2、依赖引入

依赖导入

3、编写控制类

package com.ly.logback.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class indexController {
    // logback
    private final static Logger logger = LoggerFactory.getLogger(indexController.class);
    /**
     * 访问首页
     * @return
     */
    @RequestMapping("/index")
    public String index(){
        logger.debug("记录debug日志");
        logger.info("访问了index方法");
        logger.error("记录了error错误日志");
        return "index";
    }

}
访问页面如下: indexController 控制台打印: indexController

我们访问地址后,控制台就对应的输出了info级别的测试日志内容了,上面我们说了这是logback的默认配置base.xml搞的鬼,那么我们该如何修改默认配置呢?

修改LogBack配置

LogBack读取配置文件的步骤
(1)尝试classpath下查找文件logback-test.xml
(2)如果文件不存在,尝试查找logback.xml
(3)如果两个文件都不存在,LogBack用BasicConfiguration自动对自己进行最小化配置,这样既实现了上面我们不需要添加任何配置就可以输出到控制台日志信息。

4、resources目录下新建logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="./logs" />
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg  %n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/runtime.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

5、测试LogBack

logback.xml配置文件配置了根输出等级是INFO,所以如果logback.xml生效,那么控制台以及文件内将不会存在Debug级别的日志输出,重启下项目,访问之前的地址/index查看控制台以及/logs/runtime.xxxx.log配置文件内容,如图: logback日志

可以看到Debug级别的日志没有输出,只有INFO以及ERROR级别日志打印并输出到文件中。
配置的./logs作为日志的输出根目录,所以LogBack自动在项目根目录下创建名叫做logs的文件夹,并且项目启动时第一次记录日志时会自动创建根据我们的命名方式的文件。

6、屏蔽记录日志

如果我们在项目中需要屏蔽某个或者多个包下不输出日志也不记录日志到文件内,那么我们需要修改application.yml添加对应配置:

logging:
  level:
   com.ly.logback.controller: 'off'

注意:在application.yml配置文件内,off必须添加双引号,否则不会生效
可以看到屏蔽了com.ly.logback.controller包下的日志打印,
为了方便测试在com.com.ly.logback包下创建一个名叫TestController的控制器并复制IndexController
再来重启下项目,访问127.0.0.1:8080/index地址后再查看下控制台以及日志文件内是否存在日志信息
发现并没有
而访问测试的 (http://127.0.0.1:8080/test)则会打印输出日志到控制台和文件。

参考链接:https://www.jianshu.com/p/28b4889b5f20

上一篇下一篇

猜你喜欢

热点阅读