Получить текущий макет от Appender в Logback?

Рассмотрим следующую базовую конфигурацию для входа в систему:

<configuration>
    <appender name="ControlAppender" class="org.quackbot.ControlAppender">
        <pattern>%d{MM/dd/yyy hh:mm:ss a}  %-5p %c - </pattern>
    </appender>
</configuration>

Как я могу использовать этот макет и отформатировать строку? Несколько разных постов в блогах и списках рассылки сообщали, что когда-то в AppenderBase были методы getLayout() и setLayout(), но их смысл был удален.

Повторное выполнение методов получения и установки для макета в моем коде не работает, оно просто возвращает ноль. event.getFormattedMessage() возвращает исходную строку, а не отформатированную. Я не могу найти какой-либо другой метод, который бы форматировал сообщение в соответствии с макетом.

Есть ли способ отформатировать сообщение по шаблону, указанному в конфигурации?

1 ответ

Решение

Конфигурация обратного входа просто объединяет указанные вами элементы. Он не составляет компоненты самостоятельно. В приведенном выше файле конфигурации вы не указали элемент макета, и поэтому он не будет введен в ваш ControlAppender.

Поскольку я не знаю, что делает ControlAppender, я не могу предложить наиболее подходящее решение. Однако у вас есть как минимум два варианта:

1) Пусть ControlAppender принимает макет в качестве параметра. Ваш конфигурационный файл будет выглядеть примерно так:

<configuration>
    <appender name="ControlAppender" class="org.quackbot.ControlAppender">
        <layout class="class="ch.qos.logback.classic.PatternLayout"">
          <pattern>%d{MM/dd/yyy hh:mm:ss a}  %-5p %c - </pattern>
        </layout>
    </appender>
</configuration>

Logback вставит экземпляр PatternLayout в ControlAppender. Затем вы можете использовать экземпляр PatternLayout для форматирования событий в соответствии с выбранным шаблоном.

2) Если вы всегда собираетесь использовать PatternLayout, вы можете создать его непосредственно из шаблона. Ваш конфигурационный файл будет выглядеть примерно так:

<configuration>
    <appender name="ControlAppender" class="org.quackbot.ControlAppender">
      <pattern>%d{MM/dd/yyy hh:mm:ss a}  %-5p %c - </pattern>
    </appender>
</configuration>

Вам потребуется метод установки в ControlAppender, то есть setPattern, чтобы шаблон вводился в ControlAppender. Когда у вас есть шаблон, вы можете создать PatternLayout самостоятельно. Например, вызвав:

 PatternLayout pl = new PatternLayout();
 pl.setPattern(pattern);
 pl.setContext(context);
 pl.start();

Кричите в списке пользователей, если вам нужна дополнительная помощь.

Другие вопросы по тегам