Список апендеров

Логгер позволяет сохранять данные сразу в несколько файлов. Такие выходные потоки данных называются аппендерами (от append). Существует довольно много стандартных апендеров, поэтому мы рассмотрим только самые популярные из них:

Апендеры Описание
1 Console Выводит данные в консоль
2 File Выводит данные в файл
3 DailyRollingFile Выводит данные в файл, файл циклически перезаписывается
4 Async Позволяет писать данные в другой аппендер асинхронно
5 Socket Пишет данные в определенный сокет
6 JDBC Пишет сообщения в базу по протоколу JDBC
7 JPA Пишет сообщения в базу по протоколу JPA
8 HTTP Шлет события по HTTP-протоколу на удаленный сервер
9 SMTP Складирует сообщения в буфер, а потом шлет в виде email’а

Хорошая документация по все апендерам есть на их официальном сайте

А ниже мы рассмотрим самые популярные и простые из них

ConsoleAppender

Самый простой аппендер – это ConsoleApender. Как вы уже догадались, он пишет свои сообщения просто в консоль. У него есть аж несколько интересных нам параметров:

Атрибуты
1 name Имя аппендера
2 filter Позволяет отфильтровать часть сообщений
3 layout Задает форматирование сообщений при выводе
4 target Задает, куда пишем: SYTEM_OUT или SYSTEM_ERR

Сконфигурировать его очень просто:


    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn" name="MyApp" packages="">
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
        <PatternLayout pattern="%m%n"/>
        </Console>
    </Appenders>
      <Loggers>
        <Root level="error">
        <AppenderRef ref="STDOUT"/>
        </Root>
    </Loggers>
    </Configuration>

FileAppender

Самый полезный апендер – это FileAppender. В отличии от ConsoleAppenderон пишет свои сообщения в файл. Что очень полезно, когда ваше приложение работает где-нибудь на сервере. У него куча параметров, т.к. он должен уметь писать файлы в разных операционных системах.

Но мы рассмотрим только самые популярные из них

1 name Задает имя аппендера
2 filter Позволяет отфильтровать часть сообщений
3 layout Задает форматирование сообщений при выводе
4 fileName Задает имя файла, куда писать сообщения
5 append Если true, то сообщения будут дописаны в старый лог, если false – лог-файл будет пересоздаваться каждый раз при запуске приложения.
6 bufferSize Задает размер буфера в байтах
7 immediateFlush Если true, то каждое сообщение сразу реально пишется на диск (без буфера). Лог начинает работать медленно, но это спасает от потери данных при падении программы.

Вы уже умеете хорошо работать с файлами, так что в этих настройках для вас ничего нового. Сконфигурировать такой логгер даже проще чем консольный:


    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn" name="MyApp" packages="">
    <Appenders>
        <File name="MyFile" fileName="logs/app.log">
        <PatternLayout>
            <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
        </PatternLayout>
        </File>
    </Appenders>
    <Loggers>
        <Root level="error">
        <AppenderRef ref="MyFile"/>
        </Root>
    </Loggers>
    </Configuration>

RollingFileAppender

Самый популярный аппендер – это RollingFileAppender. В отличии от FileAppender он позволяет разбить лог на много маленьких файлов. Это очень актуально для больших логов. Кроме того, он позволяет задать правила, что делать со старыми файлами после того, как начали писаться новые.

А у этого аппендера почти под сотню различных настроек. Подробнее с ними вы можете ознакомиться по ссылке

Рассмотрим самые популярные атрибуты этого аппендера:

Атрибуты
1 name Задает имя аппендера
2 filter Позволяет отфильтровать часть сообщений
3 layout Задает форматирование сообщений при выводе
4 fileName Задает имя файла, куда писать сообщения
5 filePattern Задает шаблон имен для архивных файлов, которые больше не пишутся
6 policy Задает условие, когда файл должен начать перезаписываться
7 strategy Описывает, что делать со старыми файлами: архивировать, историю за сколько дней хранить и т.п.

Вот хороший пример:


<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}-%i.log.gz">
    <PatternLayout>
        <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
    </PatternLayout>
    <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="250 MB"/>
    </Policies>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
    <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

С помощью параметра filePattern задан шаблон для архивов старых логов. Так же тут есть два при срабатывании которых начнется писаться новый файл:

  • TimeBasedTriggeringPolicy – сработает, если начнутся новые сутки (поменяется текущая дата)
  • SizeBasedTriggeringPolicy– сработает, если размер файла достигнет 250Мб