Обрезка сообщения Log4J

У меня есть приложение, которое мне нужно, чтобы отображались только первые X символов (в этом примере мы скажем 5) сообщения.

Я использую PatternLayout, но не могу получить сообщение для правильного усечения сообщения.

Например, если мое сообщение журнала

The quick brown fox

Я просто хочу увидеть:

The q

Когда я использую это в шаблоне

%.5m

я получил

n fox

так как это последние 5 символов.

Я просмотрел javadoc PattenLayout, но ничего не нашел. Я знаю, что это немного странно - не видеть все сообщение целиком, но для этого конкретного приложения это имеет смысл. Я регистрирую все сообщение в другом приложении. Я бы хотел по возможности избегать написания собственного класса.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
6
0
3 991
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По умолчанию усечение выполняется с начала сообщения (в отличие от 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.

В качестве примечания обратите внимание на лицензионные разветвления модификации открытого исходного кода в вашем конкретном проекте.

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