Получить текущий макет от 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();
Кричите в списке пользователей, если вам нужна дополнительная помощь.