Вопрос
У меня есть приложение, в котором я хочу отображать только первые X символов (в данном примере мы скажем 5) сообщения.
Я использую PatternLayout, но я не могу заставить сообщение правильно обрезать сообщение.
Например, если мое сообщение в журнале является
Быстрая бурая лисица
Я просто хочу увидеть :
Вопрос
Когда я использую это в Шаблоне
%.5 м
Я получаю
n фокс
поскольку это последние 5 символов.
Я просмотрел Схема расположения javadoc, но ничего не смог найти.Я знаю, что это немного странно - не хотеть видеть все сообщение целиком, но для этого конкретного приложения это имеет смысл.Я действительно регистрирую все сообщение в другом приложении.Я бы хотел избежать написания пользовательского класса, если это возможно.
Решение
Усечение выполняется с начала сообщения по умолчанию (отличается от printf в C, который выполняет это с конца).
Правильный шаблон должен быть:
%.-5m
Редактировать:
Я только что попробовал это, и log4j не нравится этот шаблон.Однако предоставленный шаблон будет нормально работать при обратном входе в систему, если вы сможете выполнить переключение заново.Если вы не можете переключить поставщика ведения журнала, вы могли бы внести одноразовое изменение в log4j.Интересный фрагмент кода появляется в строках 75-76 org.apache.log4j.helpers.Преобразователь шаблонов:
if(len > max)
sbuf.append(s.substring(len-max));
Это должно гласить:
if(len > max)
sbuf.append(s.substring(0,max));
Вы можете просто внести изменения и перекомпилировать jar для вашего использования, или вы можете создать подкласс PatternConverter для выполнения надлежащего усечения.Для этого также потребуется новая версия PatternLayout, которая содержит метод createPatternParser, который вам нужно будет переопределить в вашем подклассе, чтобы создать экземпляр вашей новой версии PatternConverter.
В качестве дополнительного примечания имейте в виду лицензионные последствия изменения открытого исходного кода в вашем конкретном проекте.