Вопрос

У меня есть приложение, в котором я хочу отображать только первые 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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top