用了很久日志,但是并不清楚怎样集成到项目当中的,由于现在接触到了日志这一方面的内容,所以记录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标签接管,咱们在文档中的注释已经解释的很清楚了