Статьи

Как заставить Spring Boot работать с журналом Papertrail

Spring boot уже поставляется с великолепной, предварительно сконфигурированной системой ведения журналов внутри, но в реальных проектах важно иметь возможность искать журналы, объединять их и легко получать доступ. Одним из самых простых вариантов для этого является  http://papertrailapp.com/ . Они предоставляют услугу регистрации с протоколом системного журнала и бесплатным планом 100 МБ / мес. 

Подготовим papertrail для нашего примера:

  1. создать группу журналов на панели инструментов papetrail (кнопка «Создать группу»). 
  2. Создайте место назначения журнала на приборной панели papertrail. 
    1. Зайдите в «Аккаунт -> Журнал направлений»
    2. Нажмите кнопку «Создать журнал назначения».
    3. Убедитесь, что ваша группа выбрана в поле « Новые системы присоединятся».
    4. Вы можете оставить все остальные поля с их значениями по умолчанию, просто нажмите «Создать».
  3. Запомните место назначения вашего журнала (будет выглядеть как logs2.papertrailapp: 12345), мы будем использовать его позже

Spring boot использует Logback в качестве системы регистрации по умолчанию. Это мощный инструмент для ведения журнала с большим количеством опций. Для наших целей мы будем использовать  ch.qos.logback.classic.net.SyslogAppender

Добавьте файл «logback.xml» в папку «resources» со следующим содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
        <syslogHost>${PAPERTRAIL_HOST}</syslogHost>
        <port>${PAPERTRAIL_PORT}</port>
        <facility>USER</facility>
        <suffixPattern>${PAPERTRAIL_APP:-app} %highlight([%.-1level]) %35.35logger{35}:\t%m\t%cyan%ex{5}</suffixPattern>
        <throwableExcluded>true</throwableExcluded>
    </appender>
    
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="SYSLOG" />
    </root>
    
</configuration>

Я использую переменные среды ((1), (2) и (3)) для учетных данных Papertrail, это позволит вам настраивать разные места назначения журналов в разных прикладных средах. 

Обратите внимание, исключено броска в (4). У нас уже есть шаблон для throwable в suffixPattern (% cyan% ex {5}). Почему мы это делаем? Поскольку в противном случае построчно будут напечатаны трассировки стека исключений после основного сообщения журнала, это увеличит трафик, а также вы не сможете увидеть трассировку стека в поиске. 

Я продемонстрирую, как это работает с очень простым приложением Spring Boot:

package com.github.bsideup.spring.boot.example.papertrail;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {
    
    private static final Logger log = LoggerFactory.getLogger(Application.class);
    
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
    @RequestMapping("/")
    public String index() {
        log.warn("I'm so tired to welcome everyone", new Exception(new Exception()));
        return "Hello world!";
    }
}

Теперь запустите ваше приложение со следующими переменными окружения:

  • PAPERTRAIL_HOST — хост из вашего места назначения журнала (то есть logs2.papertrailapp.com)
  • PAPERTRAIL_PORT — порт из пункта назначения вашего журнала (т. Е. 12345)
  • [необязательно] PAPERTRAIL_APP — имя приложения (по умолчанию: приложение)

Ваш вывод бумажных трасс будет похож на мой:

Вы можете найти пример проекта на GitHub:  https://github.com/bsideup/spring-boot-sample-papertrail