文章目录
在这个页面上,我们将提供spring boot
日志记录的例子。
Spring boot
可以使用Logback
、Log4J2
、java util logging
。
默认情况下,spring boot
使用Logback
进行日志记录。
默认情况下,日志被记录在控制台,也可以被记录在文件中。
Logback
的JAR
依赖为spring-boot-starter-logging
。
当我们使用任何spring boot starter
时,spring-boot-starter-logging
就被默认引入。我们不需要单独引入它。
如果Logback
的JAR
在类路径中可用,那么spring boot
将始终选择Logback
作为日志记录。
因此,要使用其他日志,如Log4J2
,我们需要排除Logback
的JAR
并在类路径中添加Log4J2
。
要使用Logback
日志,我们什么都不用做,只要在application.properties
或application.yml
中配置日志级别就可以了。
默认情况下,ERROR
、WARN
和INFO
日志级别的信息会被记录在控制台。
要改变日志级别,使用logging.level
属性。
要在文件中获取日志,我们可以在属性文件中配置logging.file
或logging.path
。
当日志文件达到10MB
时,将进行轮换。
找到属性文件中配置的spring
环境。
logging.level.* : 它用作包名称的前缀,用于设置日志级别。
logging.file : 它配置了一个日志文件名来记录文件中的信息。我们也可以用绝对路径配置文件名。
logging.path : 它只配置了日志文件的路径。Spring boot
创建了一个名为spring.log
的日志文件。
logging.pattern.console : 它定义了控制台中的日志模式。
logging.pattern.file: 它定义了文件中的日志模式。
logging.pattern.level: 它定义了渲染日志级别的格式。默认是%5p
。
logging.exception-conversion-word : 它定义了记录异常时的转换词。
PID : 它定义了当前的进程ID。
我们将在此讨论如何使用Logback
,并使用application.properties
和application.yml
以及Logback
XML
文件配置日志属性。
我们还将提供如何在我们的spring boot
应用程序中启用Log4J2
日志记录。
logging.level | 设置日志级别
logging.level
用于设置日志级别。
日志级别可以是TRACE
, DEBUG
, INFO
, WARN
, ERROR
, FATAL
, OFF
之一。
日志级别可以在根级和包级设置。
对于这个演示,我们正在创建一个有以下依赖关系的应用程序。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
我们可以按以下方式设置日志级别。使用 src\main\resources\application.properties
logging.level.root= WARN
logging.level.org.springframework.security= DEBUG
logging.level.org.springframework.web= ERROR
logging.level.org.hibernate= DEBUG
logging.level.org.apache.commons.dbcp2= DEBUG
找到属性文件的位置
如果使用 src\main\resources\application.yml
,配置如下
logging:
level:
root: WARN
org:
springframework:
security: DEBUG
web: ERROR
hibernate: DEBUG
apache:
commons:
dbcp2: DEBUG
logging.file | 指定输出日志文件的路径和名称
默认情况下,spring boot
在控制台显示日志,但如果我们想在日志文件中记录日志,我们需要定义logging.file
或logging.path
属性。
这里我们将了解logging.file
属性的使用。
logging.file
属性用于定义日志文件名。
它可以是唯一的文件名或带有路径的文件名。
在application.properties
中配置logging.file
的例子。
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.file = mylogfile.log
在这种情况下,一个名为mylogfile.log
的日志文件将被创建在项目的根目录下。我们也可以给日志文件指定一个路径,即 concretepage/mylogfile.log
。在这种情况下,日志文件将以相对于项目根目录的concretepage/mylogfile.log
的路径创建。我们也可以为日志文件的位置指定一个绝对路径。
在application.yml
中配置logging.file
的例子。
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
file: mylogfile.log
logging.path | 指定输出日志文件的路径
为了获得日志文件,我们需要定义logging.file
或logging.path
属性。这里我们将了解logging.path
属性的使用。logging.path
属性用于定义日志文件的路径。一个名为spring.log
的日志文件将在给定的路径中被创建。
在application.properties
中配置logging.path
的例子。
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.path = concretepage/logs
一个名为spring.log
的日志文件将被创建,路径为concretepage/logs/spring.log
,相对于项目的根目录。
我们也可以为日志文件的位置指定一个绝对路径。
在application.yml
中配置logging.path
的例子。
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
path: concretepage/logs
logging.pattern.console | 配置控制台输出格式
要改变控制台的日志模式,我们需要使用logging.pattern.console
属性。
日志模式包括日期、时间、日志级别、线程名称、日志者名称和消息。
我们可以根据我们的要求改变控制台中的日志模式,如下。
使用application.properties
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.pattern.console= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
使用application.yml
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
pattern:
console: '%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
logging.pattern.file | 配置日志文件输出格式
要改变文件中的日志模式,我们需要在属性文件中配置logging.pattern.file
。但首先,我们需要启用文件中的日志记录。通过在属性文件中配置logging.file
或logging.path
,可以启用文件中的日志记录。
使用application.properties
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.path = concretepage/logs
logging.pattern.file= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
logging.pattern.console= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
为了启用文件中的日志记录,我们使用logging.path
属性。一个名为spring.log的日志文件将在相对于项目根目录的concretepage/logs中创建。logging.pattern.file属性将设置文件中的日志模式,logging.pattern.console属性将设置控制台的日志模式。
使用application.yml
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
path: concretepage/logs
pattern:
file: '%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
console: '%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
使用命令行改变控制台输出的日志级别
ERROR
、WARN
和INFO
日志级别是默认显示的。
我们可以使用命令行和属性文件启用DEBUG
和TRACE
日志级别。
假设我们有一个名为my-app.jar
的可执行jar
,那么要启用DEBUG
级别,请按以下方式启动该应用程序。
java -jar my-app.jar --debug
同样也可以通过属性文件来实现,配置属性如下。
使用application.properties
debug=true
使用application.yml
debug: true
以同样的方式,我们可以使用命令行启用TRACE
级别的日志。
java -jar my-app.jar --trace
同样也可以通过属性文件来实现,配置属性如下。
使用application.properties
trace=true
使用application.yml
trace: true
在我们的程序中使用日志记录
我们正在创建一个将使用SLF4J
与Logback
的例子。为了在我们的类中使用日志,我们需要在我们的类中实例化org.slf4j.Logger
。找到这个例子。
MyApplication.java
package com.concretepage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
private static final Logger logger = LoggerFactory.getLogger(MyApplication.class);
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
logger.debug("--Application Started--");
}
}
通过application.properties
中的其他日志配置,启用com.concretepage
包的日志记录。
logging.level.root= WARN
logging.level.org.springframework.web= ERROR
logging.level.com.concretepage= DEBUG
输出
2017-03-25 19:03:54.189 DEBUG 4828 --- [ main] com.concretepage.MyApplication : Running with Spring Boot v1.5.2.RELEASE, Spring v4.3.7.RELEASE
2017-03-25 19:03:54.189 INFO 4828 --- [ main] com.concretepage.MyApplication : No active profile set, falling back to default profiles: default
2017-03-25 19:03:58.846 INFO 4828 --- [ main] com.concretepage.MyApplication : Started MyApplication in 5.209 seconds (JVM running for 5.66)
2017-03-25 19:03:58.846 DEBUG 4828 --- [ main] com.concretepage.MyApplication : --Application Started--
使用 XML 文件配置 Logback
默认情况下,spring boot
使用Logback
,我们在application.properties
或application.yml
中配置日志级别。如果我们想对Logback
使用XML
配置,那么我们需要在类路径中创建logback-spring.xml
文件。
src\main\resources\logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<logger name="org.springframework.web" level="ERROR"/>
<logger name="com.concretepage" level="DEBUG"/>
</configuration>
使用自定义日志:Log4j2
当我们使用任何spring boot
启动器时,Logback
依赖项spring-boot-starter-logging
被默认解决在类路径中。要使用Log4j2
,我们需要排除它并包含spring-boot-starter-log4j2
,如下所示。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
现在在类路径中创建log4j2-spring.xml
并配置日志。
参考文献
【1】Spring Boot features: Logging
【2】How-to guides: Logging
【3】Spring Boot Logging Example