Логирование в Java через REST API
Отправляйте логи из Java-приложения штатным HttpClient. Logger примет сообщение и покажет его подключённому клиенту через WebSocket — без промежуточного хранилища.
Отправка через 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}");
}
}
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("Сервис запущен");
Особенности логирования из Java
- 01
Только JDK
Пример использует java.net.http из JDK 11+ и не требует сторонних библиотек.
- 02
Совместимо с Logback и Log4j
Через мост к JUL или собственный Appender запрос отправляется тем же POST-методом.
- 03
Доставка, а не архив
Сервер не сохраняет логи — клиент должен быть подключён до отправки сообщения.
Частые вопросы
Какая версия Java нужна?
Для примера достаточно JDK 11 и выше — используется встроенный java.net.http.HttpClient.
Как связать Logger с Log4j2 или Logback?
Напишите собственный Appender, который вызывает тот же POST-запрос. Структура запроса одинакова для всех языков и описана в документации API.
Логи сохраняются на сервере?
Нет. Logger доставляет события подключённому клиенту через WebSocket и не ведёт серверный архив.
Отправка логов из других языков
Поймайте следующее событие.
Откройте клиент, получите Consumer Key и отправьте первый лог из Java.