Как и где можно просматривать логи Java-приложения?

«Как и где можно просматривать логи Java-приложения?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Логи можно просматривать в нескольких местах в зависимости от конфигурации и используемых инструментов.

Основные источники и инструменты:

  1. Консоль (stdout/stderr): Прямой вывод во время запуска приложения, например, через System.out.println() или логирование в консольный аппендер.
  2. Файлы логов: Наиболее распространенный способ. Фреймворки логирования (Logback, Log4j2) записывают логи в файлы согласно конфигурации.
    • Типичные пути: ./logs/application.log, /var/log/myapp/.
    • Пример конфигурации Logback (logback.xml):
      <configuration>
      <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
          <file>logs/app.log</file>
          <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
              <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
              <maxHistory>30</maxHistory>
          </rollingPolicy>
          <encoder>
              <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
          </encoder>
      </appender>
      <root level="INFO">
          <appender-ref ref="FILE" />
      </root>
      </configuration>
  3. Централизованные системы мониторинга (Observability): Для распределенных систем.
    • Стек ELK/EFK: Логи отправляются в Elasticsearch и визуализируются в Kibana.
    • Grafana Loki + Promtail: Легковесная альтернатива ELK.
    • Splunk, Datadog: Коммерческие платформы.

Для Spring Boot приложения:

  • Логи по умолчанию выводятся в консоль. Файловое логирование настраивается в application.properties:
    logging.file.name=myapp.log
    logging.level.root=INFO
    logging.level.org.springframework.web=DEBUG
    logging.level.com.mycompany=TRACE
  • Для просмотра логов в реальном времени из терминала можно использовать команды: tail -f logs/app.log или less +F logs/app.log.