Skip to content

Настройка журналирования Java-приложения в Syslog и подсистему ЖУРНАЛЛИСТ

Java-приложения обычно используют логирующие фреймворки (Logback, Log4j, Log4j2, JUL). Для интеграции с подсистемой ЖУРНАЛЛИСТ возможны два основных подхода:

  • прямая отправка в syslog через аппендеры
  • запись в файл с последующей пересылкой через системный syslog (rsyslog / syslog-ng)

Общая схема

Java App:

  • генерирует логи (события, ошибки, бизнес-операции)
  • лог-фреймворк отправляет их в syslog или файл
  • syslog пересылает сообщения в ЖУРНАЛЛИСТ

Варианты интеграции

1. Прямая отправка в syslog (рекомендуется для простых сценариев)

2. Через файл + syslog (рекомендуется для production)

Вариант 1. Logback → Syslog

Пример logback.xml

xml
<configuration>

  <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
    <syslogHost>localhost</syslogHost>
    <port>514</port>
    <facility>LOCAL0</facility>
    <suffixPattern>%date [%thread] %-5level %logger - %msg%n</suffixPattern>
  </appender>

  <root level="INFO">
    <appender-ref ref="SYSLOG"/>
  </root>

</configuration>

Вариант 2. Log4j (legacy)

properties
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=localhost
log4j.appender.SYSLOG.facility=LOCAL0
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

log4j.rootLogger=INFO, SYSLOG

Вариант 3. Log4j2 → Syslog

xml
<Appenders>
  <Syslog name="Syslog" host="localhost" port="514"
          protocol="UDP" facility="LOCAL0">
    <PatternLayout pattern="%d [%t] %-5level %logger - %msg%n"/>
  </Syslog>
</Appenders>

<Loggers>
  <Root level="info">
    <AppenderRef ref="Syslog"/>
  </Root>
</Loggers>

Вариант 4. Через файл (рекомендуется для production)

Пример logback

xml
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>/var/log/myapp/app.log</file>
</appender>

Настройка rsyslog

bash
# /etc/rsyslog.d/java-app.conf

input(type="imfile"
      File="/var/log/myapp/*.log"
      Tag="java-app"
      Facility="local0")

Пересылка в ЖУРНАЛЛИСТ

bash
local0.* @@journalist-server:514

syslog-ng (альтернатива)

bash
source s_java {
    file("/var/log/myapp/*.log");
};

destination d_journalist {
    tcp("journalist-server" port(514));
};

log {
    source(s_java);
    destination(d_journalist);
};

Вариант 5. Через stdout (контейнеры / systemd)

Если приложение пишет в stdout:

  • systemd → journald
  • journald → rsyslog
bash
module(load="imjournal")

if $programname == 'java-app' then @@journalist-server:514
& stop

Проверка

  1. Проверить локальный лог:
bash
tail -f /var/log/myapp/app.log
  1. Сгенерировать событие:
java
logger.info("Test message");
  1. Убедиться, что событие появилось в ЖУРНАЛЛИСТ

Какие события попадают

  • ошибки приложения
  • бизнес-события
  • операции API
  • исключения (exceptions)
  • события интеграций

Рекомендации

  • использовать отдельный facility (local0–local7)
  • избегать debug в production
  • использовать TCP для передачи
  • для production — использовать файл + syslog

Особенности Java-приложений

  • высокая гибкость форматов логов
  • большое количество событий
  • важна структурированность (JSON/log pattern)

Когда использовать syslog

Рекомендуется:

  • при централизованном мониторинге
  • при микросервисной архитектуре
  • для корреляции с инфраструктурой

Краткий вывод

Java-приложения легко интегрируются с подсистемой ЖУРНАЛЛИСТ через log-фреймворки и системный syslog. Это позволяет включить события приложений в единую систему анализа, выявления причин и автоматизации действий.