Использование Logging в Spring Boot

View more Tutorials:

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 разных уровней.
  1. TRACE
  2. DEBUG
  3. INFO
  4. WARN
  5. ERROR
  6. FATAL
  7. 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) ниже:
  1. logging.pattern.console
  2. 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
 

View more Tutorials: