springboot 日志

先说个结论:
Springboot默认支持的是logback日志控件。

定义一个UserDao

package com.zhihao.miao.dao;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class UserDao {

    private Logger logger = LoggerFactory.getLogger(getClass());

    public void addUser(){
        logger.debug("user dao debug log");
        logger.info("user dao info log");
        logger.warn("user dao warn log");
        logger.error("user dao error log");
    }
}

定义一个UserService:

import com.zhihao.miao.dao.UserDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class UserService {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    private UserDao userDao;

    public void addUser(){
        logger.debug("user service debug log");
        logger.info("user service info log");
        logger.warn("user service warn log");
        logger.error("user service error log");
        userDao.addUser();
    }
}

启动类启动,调用UserService.addUser

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
        context.getBean(UserService.class).addUser();
    }
}

说明springboot默认的日志级别是info级别。

怎么去调整日志级别呢?

logging.level.root=debug

我们发现控制台上除了打印出了我们配置的dao和service的debug日志外,还打印出springboot的dubug的日志。

还可以定制某些包下的日志级别

logging.level.com.zhihao.miao.dao=debug

默认日志组件的源码spring-boot-1.5.4jar包下的org.springframework.boot.logging这个包下。

springboot 日志_第1张图片
定义了7种日志级别

自己还可以指定日志的输出文件

logging.file=/Users/naeshihiroshi/work/workspace/selfStudy/springboot-demos/springboot.log

输出日志路径,此时的日志名字是spring.log

logging.path=/Users/naeshihiroshi/work/workspace/selfStudy/springboot-demos/

上面二种配置日志文件大小10M之后就会分割了。

还可以指定日志输出的格式,我们这边给控制台指定一种格式,给日志文件指定一种格式:

logging.level.com.zhihao.miao.dao=debug

logging.path=/Users/naeshihiroshi/work/workspace/selfStudy/springboot-demos/

logging.pattern.console=%-20(%d{yyyy-MM-dd} [%thread]) %-5level %logger{80} - %msg%n
logging.file.console=%-20(%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread]) %-5level %logger{80} - %msg%n
springboot 日志_第2张图片
控制台输出
日志文件格式

结论
Springboot默认支持的是logback日志控件。可以在application.properties中配置,也可以在classptah下放一个logback.xml,logback-spring.xml(官方推荐使用logback-spring.xml)的文件,也可定制日志的输出。

源码分析

默认日志组件的源码spring-boot-1.5.4jar包下的org.springframework.boot.logging这个包下。

springboot 日志_第3张图片

默认支持三种日志组件,java,log4j2,logback三种日志组件,默认的日志组件是logback。查看logback包下的base.xml文件,

springboot 日志_第4张图片

默认的日志级别是INFO,包括控制台和文件。

再看defaults.xml,定义了控制台和文件的日志格式,

file-appender.xml文件定义了文件大小为10M的时候进行分割等等


springboot 日志_第5张图片

定制成其他日志组件

springboot默认的是logback日志组件,如果我想定制成log4j2组件呢?

步骤大概如下:

  • spring-boot-starter依赖中排除spring-boot-starter-logging依赖
  • 加入相关日志组件的依赖
  • 将相应的配置文件放入到classpath下

具体步骤如下,修改依赖:


      
          org.springframework.boot
          spring-boot-starter
          
              
                  org.springframework.boot
                  spring-boot-starter-logging
              
          
      
      
          org.springframework.boot
          spring-boot-starter-log4j2
      

将log4j2-spring.xml(推荐)或者log4j2.xml文件放在classpath路径下,
log4j2-spring.xml内容如下:

  
  

    
          
              
        
      
    
       
        
            
        
    
    

重启项目,验证是正确的。

你可能感兴趣的:(springboot 日志)