02.SpringBoot 日志配置

  • 前言
  • 一、slf4j、Commons Logging、log4j、logback的区别
  • 1、slf4j(Simple Loging Facade For Java)
  • 2、Commons Logging
  • 3、log4j (Log for Java)与ogback
  • 二、SpringBoot 关于日志的常用配置
  • 1、日志文件输出
  • 2、关于logback的扩展


前言

不知道有没有人和我一样对sl4j、Commons Logging、log4j、logback傻傻分不清楚的。下面将将浅浅的聊一下他们的区别,然后在说一下Spring Boot关于日志的一些常用配置。

一、slf4j、Commons Logging、log4j、logback的区别

1、slf4j(Simple Loging Facade For Java)

slf4j是为各种日志架构(如java.util.loging,logback,log4j)提供日志输出的统一接口,并不是一个具体的日志实现方式。
从设计模式角度,slf4j用到的是适配器模式(适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。),类似于使用mybatis时候,不需要关注连接的数据库是什么类型,只需要使用预先提供好的抽象接口既可以操作数据库。

2、Commons Logging

Commons Logging与slf4j功能是一样的。commons-logging是Apache实现为不同日志系统实现之间的桥梁。使用common-logging API的lib可以在运行时用于任何日志框架的实现。commonlogging,为其他的日志实现编写适配器这一项任务。
Commons Logging也是SpringBoot默认用来实现内部打印的工具包。

3、log4j (Log for Java)与ogback

log4j与logback其实是同一个作者所写的。在logback首页中是这样介绍到logback的“Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off.”,我是理解为logback是log4j的升级版,官网中介绍到logback比log4j在关键执行路径上速度快大约10倍,且内存占用空间也较小。还有很多其他新功能这里就复述了,感兴趣的话可以到官网中查看。
SpringBoot 默认使用的是Logback

二、SpringBoot 关于日志的常用配置

Spring Boot使用Commons Logging进行所有内部日志记录,但是他也把底层日志接口实现方法开放给用户进行自定义。Spring Boot 提供了java.util.Logging,Log4j2和logback的默认配置。
默认情况下,Spring Boot使用Logback做为日志记录系统。

1、日志文件输出

默认情况下,Spring Boot日志只输出到控制台,而不会输出到文件中。如果我们需要将日志写到文件中的话,需要在application.yml中配置logging.file.name或者logging.file.path两个属性.

属性名称

例子

描述

logging.file.name

my.log

将日志写到my.log文件中,这个属性值可以是一个确切的位置或相堆路径。

logging.filepath

/var/log

将日志写到spring.log到/var/log目录下。

2、关于logback的扩展

我们可以创建logback-spring.xml来配置关于logback的一些扩展内容。下面一个是logback-spring.xml的示例:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- 引入SpringBoot默认配置 -->
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="org.springframework.web" level="INFO"/>
    <logger name="org.springboot.sample" level="TRACE" />

    <!-- 开发、测试环境 -->
    <springProfile name="dev,test">
        <logger name="org.springframework.web" level="INFO"/>
        <logger name="org.springboot.sample" level="INFO" />
        <logger name="com.gxfs" level="DEBUG" />
    </springProfile>

    <!-- 生产环境 -->
    <springProfile name="prod">
        <logger name="org.springframework.web" level="ERROR"/>
        <logger name="org.springboot.sample" level="ERROR" />
        <logger name="com.gxfs" level="ERROR" />
    </springProfile>

</configuration>

说明

  • 1)、springProfile 标签用于区分环境
  • 2)、logger标签 用来设置某一个包或具体的某一个类的日志打印级别
  • 3)、 引入SpringBoot的默认配置,这里我们看一下base.xml的源码
<included>
	<!-- 再次引入默认配置 -->
	<include resource="org/springframework/boot/logging/logback/defaults.xml" />
	<!-- 设置了日志文件属性,默认是输出到spring.log中 -->
	<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
	<!-- 再次引入控制台默认配置 -->
	<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
	<!-- 再次引入文件默认配置 -->
	<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
	<root level="INFO">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="FILE" />
	</root>
</included>

由此可以看到Spring Boot关于logback是提供了一系列默认配置,包括日志文件的Rotation等,

暂时告一段落先,// TODO 若有时间将继续完善几个xml的源码的解读。