betacode

Используйте Logging в Spring Boot

  1. Цель статьи
  2. Создать проект Spring Boot
  3. Logging Level
  4. Logging File
  5. Logging Pattern

1. Цель статьи

Проще говоря "Logging" это "запись" всех проблем во время работы приложения. Проблемами здесь могут быть информация ошбки, предупреждения (warning), и другая информация, ... Данная информация может быть отображена на экране Console или записана в файле.
Когда вы запускаете приложение Spring Boot напрямую на Eclipse вы можете увидеть информацию на окне Console, данная информация дает вам знать статус приложения, ошибки происходящие во время работы приложения. Это и есть Logging!.
Имеется много разных библиотек Logging как Logback, Log4j2, JUL,.. Spring Boot может работать со всеми этими библиотеками. По умолчанию Spring Boot уже автоматически конфигурирован и использует библиотеку Logback для его logging, и вам не нужно никаких дополнительных конфигураций, только если вы хотите кастомизировать некоторые аргументы (argument). Кастомизации здесь могут определение название файла для записи информации, шаблон (pattern), ...
В данной статье мы обсудим принцип работы Logback в приложении Spring Boot, и изучим способ кастомизации для Logback.
Свойства (properties), которые вы можете кастомизировать:
logging.config
logging.exception-conversion-word
logging.file
logging.level.*
logging.path
logging.pattern.console
logging.pattern.file
logging.pattern.level
logging.register-shutdown-hook

2. Создать проект Spring Boot

На Eclipse создайте проект Spring Boot.
Чтобы использовать Logging, вам нужно использовать один из следующих "Starter":
  • spring-boot-starter-logging
  • spring-boot-starter-web
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.o7planning</groupId>
    <artifactId>SpringBootDefaultLogging</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>SpringBootDefaultLogging</name>
    <description>Spring Boot +Default Logging</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
MainController.java
package org.o7planning.sblogging.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

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

@Controller
public class MainController {

    private static final Logger LOGGER = LoggerFactory.getLogger(MainController.class);

    @ResponseBody
    @RequestMapping(path = "/")
    public String home() {

        LOGGER.trace("This is TRACE");
        LOGGER.debug("This is DEBUG");
        LOGGER.info("This is INFO");
        LOGGER.warn("This is WARN");
        LOGGER.error("This is ERROR");

        return "Hi, show loggings in the console or file!";
    }
    
}
Запустите ваше приложение напрямую на Spring Boot, потом пройдите по следующей ссылке:
На окне Console у Eclipse вы можете увидеть информацию Logs следующим образом:
2018-01-14 13:21:57.593  INFO 7980 --- [nio-8080-exec-6] o.o.sblogging.controller.MainController  : This is INFO
2018-01-14 13:21:57.593  WARN 7980 --- [nio-8080-exec-6] o.o.sblogging.controller.MainController  : This is WARN
2018-01-14 13:21:57.593 ERROR 7980 --- [nio-8080-exec-6] o.o.sblogging.controller.MainController  : This is ERROR

3. Logging Level

Основывая на уровень серьезности проблемы, Logback делит информацию для записи на 5 уровней (Level), наименее серьезная это TRACE, и самая серьезная это ERROR. Примечание: Имеются некоторые библиотеки Logging, которые делят информацию для записи на 7 разных уровней.
  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL
  • OFF
По умолчанию Spring Boot запсывает только информацию с серьезностью от уровня INFO и выше
# Default:

logging.level.root=INFO
Изменить Logging Level в application.properties:
* application.properties *
logging.level.root=WARN

# ..
Перезапустите ваше приложение, и просмотрите информацию записанную на окне Console:
2018-01-14 17:45:50.341  WARN 8500 --- [nio-8080-exec-1] o.o.sblogging.controller.MainController  : This is WARN
2018-01-14 17:45:50.342 ERROR 8500 --- [nio-8080-exec-1] o.o.sblogging.controller.MainController  : This is ERROR

4. Logging File

Информация logging по умолчанию записана на экране Console, но вы можете конфигурировать, чтобы они были записаны в файлах.
* application.properties *
logging.file=logs/mylog.log
Перезапустите ваше приложение напрямую на Eclipse, потом пройдите по следующей ссылке:
Потом обновите проект, вы сможете увидеть созданный файл logging.

5. Logging Pattern

Записи Log (Log record) записаны по шаблону (pattern), ниже является шаблон (pattern) по умолчанию:
И вы можете изменить "Logging pattern" кастомизируя свойства (properties) ниже:
  • logging.pattern.console
  • logging.pattern.file
# Pattern:

logging.pattern.console= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n

# Output:

2018-Jan-17 01:58:49.958 WARN  [http-nio-8080-exec-1] o.o.s.c.MainController - This is WARN
2018-Jan-17 01:58:49.960 ERROR [http-nio-8080-exec-1] o.o.s.c.MainController - This is ERROR
# Pattern:

logging.pattern.console= %d{dd/MM/yyyy HH:mm:ss.SSS} %-5level [%thread] %logger{115} - %msg%n

# Output:

17/01/2018 02:15:15.052 WARN  [http-nio-8080-exec-1] org.o7planning.sblogging.controller.MainController - This is WARN
17/01/2018 02:15:15.054 ERROR [http-nio-8080-exec-1] org.o7planning.sblogging.controller.MainController - This is ERROR
# Pattern:

logging.pattern.console=%d{yy-MMMM-dd HH:mm:ss:SSS} %5p %t %c{2}:%L - %m%n

# Output:

18-January-17 02:21:20:317  WARN http-nio-8080-exec-1 o.o.s.c.MainController:22 - This is WARN
18-January-17 02:21:20:320 ERROR http-nio-8080-exec-1 o.o.s.c.MainController:23 - This is ERROR

Руководства Spring Boot

Show More