Этому вопросу уже 5 лет, но я предоставляю решение, которое нашел, чтобы просто обновлять его.
Я нашел решение в официальных документах:
http://logback.qos.ch/manual/layouts.html
Для моей конкретной ситуации, когда 17-летний веб-сайт работает с простыми старыми сервлетами (ах, дни), сервлет теперь выдает исключение, если пользователь не вошел в систему. Итак, вот мои фрагменты кода:
Servlet
try {
InvalidLoginException.throwIfBadLogin(webUser);
// main logic here
} catch (InvalidLoginException e) {
throw e;
} catch (Throwable t) {
log.error(t);
throw new UnhandledException(t);
}
web.xml
<error-page>
<exception-type>com.mycompany.servlet.exception.InvalidLoginException</exception-type>
<location>/servlet/Login</location>
</error-page>
Из вышеприведенной настройки я не хотел регистрировать это исключение, поскольку оно не на самом деле исключение, а скорее разрыв логики для перенаправления на вход в систему.
Итак, начало моего logback.xml файла таково:
<configuration packagingData="true" scan="true" debug="true" scanPeriod="30 seconds">
<evaluator name="InvalidLoginExceptionSuppressor">
<expression>throwable != null && throwable instanceof com.mycompany.servlet.exception.InvalidLoginException</expression>
</evaluator>
и далее в файле logback.xml мои добавители:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg %ex{full,InvalidLoginExceptionSuppressor}%n</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
Также обратите внимание, что для этой работы мне пришлось включить janino для обработки разбора выражения.