SpringBoot_03_日志

SpringBoot_03_日志

1.日志框架

Spring默认的是JCL,而SpringBoot选用的是slf4j和Logback。

日志门面 日志实现
JCL Log4j,JUL
slf4j Log4j2
jboss-logging Logback

2.使用slf4j

日志记录方法的调用不应该直接调用日志的实现类,而是调用日志抽象层里面的方法

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

SpringBoot_03_日志

每个日志的实现框架都有自己的配置文件,使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件。

3.统一日志记录

SpringBoot_03_日志

  1. 将系统中其他日志框架先排除;
  2. 用中间包来替换原有的日志框架;
  3. 导入slf4j其他的实现;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootLoggingApplicationTests {

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

    @Test
    public void contextLoads() {
        //日志的级别(由低到高):trace<debug<info<warn<error
        //可以在application.properties里配置日志输出级别:logging.level.com.hoki=trace
        logger.trace("trace");
        logger.debug("debug");
        //没有指定级别的,SpringBoot默认使用的是info级别的
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
    }

}
logging.level.com.hoki=trace
# 当前项目下生成log日志
#logging.file=springboot.log
# 也可以指定完整路径
#logging.file=G:/springboot.log
# 默认使用的是spring.log,位置: 如E:\spring\log,项目的磁盘根路径下
logging.path=/spring/log
# 在控制台输出的日志格式
logging.pattern.console=%d{yyyy-mm-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-mm-dd} === [%thread] === %-5level === %logger{50} === %msg%n

日志输出格式

  • %d : 日期时间
  • %thread : 线程名
  • %-5level : 级别从左显示5个字符宽度
  • %logger{50} : logger名字最长50个字符,否则按照句点分割
  • %msg : 日志消息
  • %n : 换行符