Что такое система логирования?

«Что такое система логирования?» — вопрос из категории Логирование и отчётность, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Система логирования — это инструментарий для записи (логгирования) событий, происходящих во время работы приложения. Эти записи (логи) используются для отладки, мониторинга работы системы и анализа инцидентов.

Ключевые компоненты и концепции:

  • Уровни логирования (Log Levels): Позволяют классифицировать важность сообщений. Стандартные уровни (от наименее к наиболее критичным):
    • TRACE / DEBUG — детальная информация для отладки.
    • INFO — информация о нормальном ходе работы (например, "Пользователь авторизован").
    • WARN — предупреждение о потенциальной проблеме.
    • ERROR — ошибка, которая не прервала работу приложения.
    • FATAL / CRITICAL — критическая ошибка, приводящая к остановке приложения.
  • Appenders / Handlers: Определяют, куда писать логи (консоль, файл, база данных, удаленная система вроде ELK или Splunk).
  • Форматеры (Layouts / Formatters): Определяют формат строки лога (дата, уровень, сообщение, stack trace).

Практика в QA:

  1. Анализ логов — основной метод диагностики: Когда автотест падает, первым делом смотрю логи приложения и тестового фреймворка, чтобы понять контекст ошибки (stack trace, состояние системы).
  2. Верификация через логи: Для сложных или асинхронных операций иногда пишу тесты, которые проверяют, что в логах появилась определенная запись (например, "Заказ №123 оплачен").
  3. Настройка уровня логирования: При запуске тестовой среды часто настраиваю уровень на DEBUG, чтобы получить максимум информации. На production-среде обычно стоит INFO или WARN.

Пример конфигурации для Java (logback.xml):

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>app.log</file>
        <encoder>
            <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="FILE" />
    </root>
</configuration>