Получить ссылку на пользовательский класс-оболочку Logger с помощью LogManager.getLogger () - PullRequest
0 голосов
/ 07 мая 2019

Я использую Log4j2, и реализация проекта по умолчанию широко использовалась в моем проекте. Теперь у меня есть требование проанализировать сообщение журнала и заменить некоторые ключевые слова, прежде чем регистрировать их в файлах журнала. Хороший подход к этому требованию может заключаться в переопределении методов ведения журнала, таких как info(), error(), ... или их базовых низкоуровневых методов, где я могу проанализировать сообщение и изменить его, а затем вызвать оригинальный метод ведения журнала суперкласса.

Я вижу, что класс AbstractLogger является классом реализации для интерфейса Logger, и когда вы делаете Logger logger = LogManager.getLogger(); в своем классе, вы получаете ссылку на класс AbstractLogger.

Теперь я создал класс CustomLogger, который расширяет AbstractLogger, чей javadoc говорит:

Базовая реализация Logger. Настоятельно рекомендуется, чтобы любой Реализация логгера расширяет этот класс.

Вопрос в том, как заставить LogManager.getLogger() возвращать ссылку на мой класс CustomLogger вместо класса AbstractLogger, так что операторы журнала в моих существующих классах не нужно изменять, и я получаю возможность анализировать и измените сообщения, прежде чем они будут зарегистрированы. В настоящее время я продолжаю получать ссылку на AbstractLogger. Я пытаюсь узнать, как Log4j предназначал пользователям расширить свою реализацию.

Ответы [ 2 ]

1 голос
/ 08 мая 2019

как упомянуто в моем комментарии - я думаю, что для этого лучше использовать appender.Это будет означать, что вам придется реализовать

org.apache.logging.log4j.core.Appender

или расширить с

org.apache.logging.log4j.core.appender.AbstractAppender

и изменить его

public void append(LogEvent event) {}   

.В зависимости от ваших потребностей, вы также можете изменить или скопировать другой класс appender (к сожалению, некоторые из них объявлены как final) и изменить его соответствующим образом.

.rm

0 голосов
/ 07 мая 2019

Я не хочу говорить RTM, но это случай RTM.Ниже следует помочь вам начать то, что вы хотите.Специально ищите в нижней части первую ссылку о том, как скомпилировать регистратор клиента.

http://logging.apache.org/log4j/2.0/manual/customloglevels.html

https://logging.apache.org/log4j/2.0/log4j-core/apidocs/org/apache/logging/log4j/core/tools/Generate.CustomLogger.html

...