Spring Boot集成logback日志

用了很久日志,但是并不清楚怎样集成到项目当中的,由于现在接触到了日志这一方面的内容,所以记录Spring Boot怎样去实现logback日志的集成的,非常的简单,只需要两步,那么就来看看是怎样的两步吧。

1.搭建Spring Boot项目

        具体怎样去搭建,用什么工具去搭建,这里不做介绍。

2.集成logback日志

        logback日志的详解在网络上已经很多了,这里不做详细介绍,只做项目中用到的内容的介绍。

第一步:搭建环境,我这里用到的是idea,怎样创建Spring Boot项目我就不做具体说明了,以下是我创建好的项目

第二步:Spring Boot项目创建好了,那么直接将写好的logback.xml放到resources下,也就集成了logback日志了,logback.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false">
    <!-- 项目名称 -->
    <contextName>demo06</contextName>
    <!-- 属性 -->
    <property name="USER_HOME" value="${user.dir}/logs/data"/>
    <!-- Insert the current time formatted as "yyyyMMdd'T'HHmmss" under
      the key "bySecond" into the logger context. This value will be
      available to all subsequent configuration elements. -->
    <timestamp key="bySecond" datePattern="yyyyMMdd-HHmmss"/>

    <!-- appender很重要,一个配置文件会有多个appender -->
    <!-- ConsoleApperder意思是从console中打印出来 -->
       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 过滤器,一个appender可以有多个 -->
        <!-- 阈值过滤,就是log行为级别过滤,debug及debug以上的信息会被打印出来 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>error</level>
        </filter>

        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <!-- encoder编码规则 -->
        <encoder>
            <!--<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>-->
            <!--<pattern>%d %contextName %msg%n</pattern>-->
            <!-- pattern模式 %d时间 %thread 线程名 %level行为级别 %logger logger名称 %method 方法名称 %message 调用方法的入参消息 -->
            <pattern>%level %message</pattern>
        </encoder>
    </appender>

    <!-- 滚动日志文件,这个比较常用 -->
    <appender name="ROLLINGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 当project等于true的时候file就不会起效果-->
        <prudent>false</prudent>
        <!--<file>${USER_HOME}/logFile.log</file>-->
        <!-- 按天新建log日志 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>${USER_HOME}/logFile.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <!-- 保留30天的历史日志 -->
            <maxHistory>30</maxHistory>

            <!-- 基于大小和时间,这个可以有,可以没有 -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- or whenever the file size reaches 100MB -->
                <!-- 当一个日志大小大于10KB,则换一个新的日志。日志名的%i从0开始,自动递增 -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <encoder>
            <!-- %ex就是指抛出的异常,full是显示全部,如果在{}中写入数字,则表示展示多少行 -->
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <!-- 基于dubug处理日志:具体控制台或者文件对日志级别的处理还要看所在appender配置的filter,
            如果没有配置filter,则使用root配置 -->
    <!-- level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR,
            不能设置为INHERITED或者同义词NULL。
            输出级别    TRACE < DEBUG < INFO < WARN < ERROR
     -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <!--<appender-ref ref="ROLLINGFILE"/>-->
    </root>
</configuration>

具体的配置内容在文件中的注释已经写的很详细了,这里只说一下logback配置文件的作用:1.在控制台只打印出error级别的日志信息,2:将大于info级别的日志信息输出到日志文件当中。那么项目集成了logback日志后,来做一个简单的测试,在包zj下创建LogController.java

package com.zj;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by zj on 2018/11/23.
 */
@Controller
@RequestMapping("/log")
public class LogController {

    private final static Logger logger = LoggerFactory.getLogger(LogController.class);

    @RequestMapping("/logTest")
    public @ResponseBody
    Map<String ,Object> logTest(){
        Map<String,Object> map = new HashMap<>();
        logger.trace("成功调用,配置为trace!");
        logger.debug("成功调用,配置为debug!");
        logger.info("成功调用,配置为info!");
        logger.warn("成功调用,配置为warn!");
        logger.error("成功调用,配置为error!");
        System.out.println("你好,Logback日志!");
        map.put("调用成功!","你好,Logback日志!");
        return map;
    }
}

测试类写好了,需要稍微修改一下logback.xml,虽然目前日志文件是可以使用的,但是控制台只打印出了error的日志信息,大家都知道error错误信息在logback中的日志级别是最高的,当限定了error的日志级别之后,其他低于error日志级别的日志将不会被打印出来,因此咱们修改一下,在标签root上添加logger标签,将需要打印日志文件的类的日志信息写入到文件当中,那么配置如下:

<logger name="com.zj.LogController" level="info" additivity="false">
    <appender-ref ref="ROLLINGFILE" />
    <appender-ref ref="STDOUT" />
</logger>

那么这个时候咱们就可以直接访问测试方法,查看是否日志文件可以使用了,调用结果如下:

再来看下是否有日志信息打印和生成了日志文件,如下:

这个时候用的朋友会问了,为什么root标签没有用到呢?这里咱们简单的介绍一下,root标签中控制的是整个项目的,如果没有在logger中定义的话,那么那个类就会被root标签接管,咱们在文档中的注释已经解释的很清楚了

猜你喜欢

转载自blog.csdn.net/u013364067/article/details/84392666