java中比较流行的日志框架有log4j、logback等。这两个框架是由同一个作者开发的,后者对前者做了进一步的改善。而 slf4j(Simple Logging Facade for Java) 则对日志系统中常用的接口进行了抽象,logback 和 log4j 对slf4j 进行了实现。
本文将介绍在spring-boot中如何使用logback+slf4j实现日志的记录。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter-web 包含了spring-boot-starter,spring-boot-starter中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 Logback+SLF4J。所以我们只需要引入web组件即可
我们先来看下logback的简单使用,配置文件在稍后的章节中介绍。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyServiceImpl implements MyService {
private static final Logger LOGGER = LoggerFactory.getLogger(MyServiceImpl.class);
@Override
public void doStuff(final String value) {
LOGGER.debug("doStuff needed to debug - {}", value);
LOGGER.info("doStuff took input - {}", value);
LOGGER.warn("doStuff needed to warn - {}", value);
LOGGER.error("doStuff encountered an error with value - {}", value);
}
}
新建一个名为logback-spring.xml
的日志配置文件,将xml放至 src/main/resource下面。
xml文件示例:
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="APP_NAME" value="euler-platform" />
<property name="LOG_PATH" value="${user.home}/${APP_NAME}/logs" />
<property name="LOG_FILE" value="${LOG_PATH}/application.log" />
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE}file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.logfileNamePattern>
<maxHistory>7maxHistory>
<maxFileSize>50MBmaxFileSize>
<totalSizeCap>20GBtotalSizeCap>
rollingPolicy>
appender>
<root level="INFO">
<appender-ref ref="APPLICATION" />
root>
configuration>
示例文件配置的结果是,把日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件。
logback.xml配置文件的基本结构可以描述为
元素,包含零个或多个
元素,后跟零个或多个
元素,后跟最多一个
元素(也可以没有)。下图说明了这种基本结构:
即记录器,作用是控制日志的输出级别与日志是否输出。只接受一个必需的name属性,一个可选的level属性和一个可选的additivity属性。 level属性的值可以为TRACE,DEBUG,INFO,WARN,ERROR,ALL或OFF。
元素可以包含零个或多个
元素,用于将每个appender都添加到指定的logger中。
元素
即输出端,作用是指定日志的输出方式(输出到控制台、文件等)。
该元素有两个必需属性name和class。 name属性指定appender的名称,而class属性用于指定日志的输出方式。作为应用日志,一般使用的是 例子中的RollingFileAppender,就是将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件。
元素有以下子元素:
:被写入的文件名
:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类。例子中用了SizeAndTimeBasedRollingPolicy,可以基于时间、大小两个维度Rolling策略。
元素
元素是特别的一个记录器,根记录器。 它支持单个属性,即level属性。此外,由于根记录器已被命名为“ROOT”,因此它也不允许使用name属性。level属性的值可以是不区分大小写的字符串TRACE,DEBUG,INFO,WARN,ERROR,ALL或OFF之一,
元素可以包含零个或多个
元素, 这样引用的每个appender都被添加到根记录器中