ИНТЕГРАЦИЯ / JAVA

Логирование в Java через REST API

Отправляйте логи из Java-приложения штатным HttpClient. Logger примет сообщение и покажет его подключённому клиенту через WebSocket — без промежуточного хранилища.

Один POST-запросБез хранения логов на сервере
01 / БЫСТРЫЙ СТАРТ

Отправка через java.net.http

Отправьте первое событие из Java за пару минут. Consumer Key выдаётся после регистрации в веб-интерфейсе.

import java.net.URI;
import java.net.http.*;
import java.time.Duration;

public class LoggerClient {
    private static final String URL = "https://logger.dp-projects.ru/sendmess";

    public static void log(String module, String mess) throws Exception {
        String body = """
            {
              "key": "ваш-consumer-key",
              "module": "%s",
              "mess": %s,
              "mode": "regular"
            }
            """.formatted(module, mess);

        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(5))
            .build();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(URL))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body))
            .build();

        HttpResponse<String> response =
            client.send(request, HttpResponse.BodyHandlers.ofString());

        System.out.println(response.statusCode());
    }

    public static void main(String[] args) throws Exception {
        log("payment-service",
            "{\"event\":\"payment_processed\",\"amount\":1000}");
    }
}
02 / ИНТЕГРАЦИЯ С ФРЕЙМВОРКОМ

Handler для java.util.logging

Если проект уже использует JUL (или SLF4J с мостом), добавьте Handler — и все существующие вызовы logger.info() начнут уходить в Logger.

import java.util.logging.*;

public class LoggerAPIHandler extends Handler {
    private final String key;
    private final String module;

    public LoggerAPIHandler(String key, String module) {
        this.key = key;
        this.module = module;
    }

    @Override
    public void publish(LogRecord record) {
        try {
            String mess = "{\"level\":\"" + record.getLevel()
                + "\",\"message\":\"" + record.getMessage() + "\"}";
            LoggerClient.log(module, mess);
        } catch (Exception ignored) {
            // логирование не должно прерывать работу приложения
        }
    }

    @Override public void flush() {}
    @Override public void close() {}
}

Logger logger = Logger.getLogger("app");
logger.addHandler(new LoggerAPIHandler("ваш-consumer-key", "java-app"));
logger.info("Сервис запущен");
03 / ЧТО ВАЖНО ЗНАТЬ

Особенности логирования из Java

  1. 01

    Только JDK

    Пример использует java.net.http из JDK 11+ и не требует сторонних библиотек.

  2. 02

    Совместимо с Logback и Log4j

    Через мост к JUL или собственный Appender запрос отправляется тем же POST-методом.

  3. 03

    Доставка, а не архив

    Сервер не сохраняет логи — клиент должен быть подключён до отправки сообщения.

04 / ВОПРОСЫ

Частые вопросы

Какая версия Java нужна?

Для примера достаточно JDK 11 и выше — используется встроенный java.net.http.HttpClient.

Как связать Logger с Log4j2 или Logback?

Напишите собственный Appender, который вызывает тот же POST-запрос. Структура запроса одинакова для всех языков и описана в документации API.

Логи сохраняются на сервере?

Нет. Logger доставляет события подключённому клиенту через WebSocket и не ведёт серверный архив.

05 / ДРУГИЕ ЯЗЫКИ
ГОТОВЫ К ПОДКЛЮЧЕНИЮ?

Поймайте следующее событие.

Откройте клиент, получите Consumer Key и отправьте первый лог из Java.

Начать работу