springboot 中使用slf4j+logback

引入坐标

	  <dependencies>
		 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

编写测试类

	// 传入的class 就是代表这个logger的class,在之后设置日志级别的时候有用
  Logger logger = LoggerFactory.getLogger(Class)
	// 级别由低到高
	log.trace();
	log.debug();
	log.info();
	log.warn();
	log.error();

配置方式

application.properties方式

1.	logging.level.+ 包路径 = 日志级别  
	//    LoggerFactory.getLogger(Class) 里面传入的class 在包路径下,则该日志级别及以上都会被打印
	// 		注意和本身得类没有关系,是和  getlogger传入的类在哪个包下有关系
	logging.level.com.meiya.level1=trace

2.	logging.file    
	logging.path    #  如果这两个都不指定的话,日志打印只会在控制台输出
	
	先指定  logging.file = my.log    日志文件默认输出到当前项目下(日志是叠加的)
	logging.path = /data/log          日志输出到   /data/log文件夹下,名称为spring.log 

3. logging.pattern.console      
   logging.pattern.file   #   输出到控制台和输出到文件的格式

springboot 默认配置

	   org.springframework.boot.logging.logback 包下 base.xml 文件包含了springboot 默认配置
	// 读取defaults.xml
	// default.xml  中定义了consule_log_pattern  和 file_log_pattern
	<include resource="org/springframework/boot/logging/logback/defaults.xml">
	// 读取控制台和文件配置信息,其中的xml都有各自默认的配置
	<include resource="org/springframeword.boot/logging/logback/console-appender.xml">
	<include resource="org/springframeword.boot/logging/logback/file-appender.xml">

自己实现配置文件

日志实现层使用的配置文件名称
Logbacklogback-spring.xml logback-spring.groovy logback.xml logback.groovy
Log4j2log4j2-spring.xml log4j.xml
JDKlogging.properties

自定义配置文件和application.properties 都有则用application.properties

logback.xml直接被logback识别
logback-spring.xmllogback不能识别,被springboot识别,转换完之后给logback用

spring高级特性

<springProfile name="">
	// 里面的内容只有当前环境成立的时候才会执行
</springProfile>

实战模拟

实际开发中,logback都是配置为按时间和大小记录
实现一个满20M就开启一个新的log文件,日志文件存放在项目log文件夹下再按天建目录,里面是每天的日志量.总量打到50个日志就删除最老的.
同时还需要满足动态切换日志等级.日常情况下只打印 info 级别及以上日志.
模拟调试的时候把日志级别调整到debug级别.

logback-spring.xml 配置文件详解

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 在此未说明属性为非必须的,那就表示属性必须设置 -->
<!-- *****************最小配置文件结构介绍******************************* -->
<!--
    <configuration>
        <appender></appender>    //存在1或多个,功能指定记录输出目的地
        <root></root>            //最多存在一个,根logger
        <logger><logger>        //存在1或多个,普通logger
    </configuration>
 -->
<!-- *************************各个标签详细介绍********************************** -->

<!-- debug(非必须)属性:true表示输出logback内部的日志信息(不影响配置和级别) ;
     scan(非必须)属性:默认为false,true表示扫描配置文件的变化并自动重新配置,默认每隔1分钟扫描一次;
     scanPeriod(非必须)属性:搭配scan属性使用,设置扫描的间隔时间
-->
<configuration debug="false" scan="true" scanPeriod="1 seconds">
    <!-- 用于指定logger上下文名称,默认为default -->
    <contextName>logback</contextName>

    <property name="LOG_HOME" value="./logback" />
    <!--
 *****************************根据时间滚动 为滚动规则和条件的appender(最常用)***********************
 -->
    <!-- 该appender的功能:将记录信息以特定格式写到文件,当文件达到20MB时,创建以时间为特定规则新的 文件,之后的记录会写到新文件,
    文件个数最多维持10个,文件达到10个 后删除旧的文件-->
    <appender name="time_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- TimeBasedRollingPolicy实现了RollingPolicy与TriggeringPolicy,
            因此只需要<rollingPolicy>标签,不需要<TriggeringPolicy>标签
            <rollingPolicy>标签有两个子标签:<fileNamePattern>、<maxHistory>
            <fileNamePattern>:用于指定文件名命名规则
            <maxHistory>:保留文件的个数,超过了就删除创建时间最久的文件
         -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/logs/aa.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxFileSize>1MB</maxFileSize>  <!-- 日志文件过大会使的编辑器打开非常慢,因此设置日志最大50MB -->
            <maxHistory>30</maxHistory>  <!-- 保存30天 -->
            <totalSizeCap>10GB</totalSizeCap>  <!-- 总日志大小 -->
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern>
        </encoder>
    </appender>

	// 写debug 的时候就会输出debug及以上的日志,如果改成info,也会自动刷新读取
    <root level="debug">
        <appender-ref ref="time_file" />
    </root>
</configuration>

版权声明:本文为weixin_48420669原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。