Spring Boot Logback、Log4J2、java util日志记录实例

x33g5p2x  于14天前 转载在 Spring  
字(7.3k)|赞(0)|评价(0)|浏览(18)

在本文中,我们将提供spring boot日志记录的例子。Spring boot可以使用Logback、Log4J2、java util日志。默认情况下,spring boot使用Logback进行日志记录。默认情况下,日志被记录在控制台,也可以被记录在文件中。Logback的JAR依赖性由spring-boot-starter-logging解决。当我们使用任何spring boot starter时,spring-boot-starter-logging被默认解决。我们不需要单独包括它。如果Logback JAR在classpath中可用,那么spring boot将总是选择Logback作为日志记录。因此,如果要使用其他日志,比如Log4J2,我们需要排除Logback JAR,在classpath中添加Log4J2 JAR。要使用Logback日志,我们什么都不用做,只要在application.propertiesapplication.yml配置日志级别就可以了。默认情况下,ERRORWARNINFO的日志级别信息被记录在控制台。要改变日志级别,使用logging.level属性。要在文件中获取日志,我们可以在属性文件中配置logging.filelogging.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.propertiesapplication.yml以及Logback XML文件配置日志属性。我们还将提供如何在我们的spring boot应用程序中启用Log4J2日志记录。

logging.level

logging.level是用来设置日志级别的。日志级别可以是TRACEDEBUGINFOWARNERRORFATALOFF之一。日志级别可以设置在根级别和包级别。在这个演示中,我们正在创建一个有以下依赖关系的应用程序。

&ltdependency>
    &ltgroupId&gtorg.springframework.boot</groupId>
    &ltartifactId&gtspring-boot-starter-web</artifactId>
    </dependency>
&ltdependency>
    &ltgroupId&gtorg.springframework.boot</groupId>
    &ltartifactId&gtspring-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.filelogging.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创建。我们也可以为日志文件的位置指定一个绝对路径。

例如,将logging.file配置在application.yml

logging:
  level:
    org:
      springframework:
        security: DEBUG
    hibernate: DEBUG

  file: mylogfile.log

使用logging.path的文件输出

为了获取文件中的日志,我们需要定义logging.filelogging.path属性。这里我们将了解logging.path属性的使用。logging.path属性被用来定义日志文件的路径。一个名称为spring.log的日志文件将被创建在给定的路径中。

例如,将logging.path配置为application.properties

logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG

logging.path = concretepage/logs

一个名为spring.log的日志文件将以相对于项目根目录的路径concretepage/logs/spring.log创建。我们也可以为日志文件的位置指定一个绝对路径。

例如,将logging.path配置在application.yml

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.filelogging.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'

使用命令行改变控制台输出的日志级别

ERRORWARNINFO的日志级别是默认显示的。我们可以使用命令行和属性文件启用DEBUGTRACE日志级别。假设我们有一个名为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--

使用Logback XML文件

默认情况下,spring boot使用Logback,我们在application.propertiesapplication.yml配置日志级别。如果我们想对Logback使用XML配置,那么我们需要在classpath中创建logback-spring.xml文件。
src\mainresources\logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
&ltconfiguration>
    &ltinclude resource="org/springframework/boot/logging/logback/base.xml"/>
    &ltlogger name="org.springframework.web" level="ERROR"/>
    &ltlogger name="com.concretepage" level="DEBUG"/>
</configuration>

使用自定义日志。Log4j2

当我们使用任何spring boot starter时,Logback的依赖关系spring-boot-starter-logging默认在classpath中解决。要使用Log4j2,我们需要排除它并包含spring-boot-starter-log4j2,如下所示。

&ltdependency>
    &ltgroupId&gtorg.springframework.boot</groupId>
    &ltartifactId&gtspring-boot-starter-web</artifactId>
</dependency>
&ltdependency>
    &ltgroupId&gtorg.springframework.boot</groupId>
    &ltartifactId&gtspring-boot-starter</artifactId>
    &ltexclusions>
        &ltexclusion>
            &ltgroupId&gtorg.springframework.boot</groupId>
            &ltartifactId&gtspring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
&ltdependency>
    &ltgroupId&gtorg.springframework.boot</groupId>
    &ltartifactId&gtspring-boot-starter-log4j2</artifactId>
</dependency>

现在在classpath中创建log4j2-spring.xml并配置日志。

现在我已经完成了。祝你学习Spring Boot愉快!

相关文章