У меня есть приложение, которое мне нужно, чтобы отображались только первые X символов (в этом примере мы скажем 5) сообщения.
Я использую PatternLayout, но не могу получить сообщение для правильного усечения сообщения.
Например, если мое сообщение журнала
The quick brown fox
Я просто хочу увидеть:
The q
Когда я использую это в шаблоне
%.5m
я получил
n fox
так как это последние 5 символов.
Я просмотрел javadoc PattenLayout, но ничего не нашел. Я знаю, что это немного странно - не видеть все сообщение целиком, но для этого конкретного приложения это имеет смысл. Я регистрирую все сообщение в другом приложении. Я бы хотел по возможности избегать написания собственного класса.




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