Я использую Log4j2, и реализация проекта по умолчанию широко использовалась в моем проекте. Теперь у меня есть требование проанализировать сообщение журнала и заменить некоторые ключевые слова, прежде чем регистрировать их в файлах журнала. Хороший подход к этому требованию может заключаться в переопределении методов ведения журнала, таких как info()
, error()
, ... или их базовых низкоуровневых методов, где я могу проанализировать сообщение и изменить его, а затем вызвать оригинальный метод ведения журнала суперкласса.
Я вижу, что класс AbstractLogger
является классом реализации для интерфейса Logger
, и когда вы делаете Logger logger = LogManager.getLogger();
в своем классе, вы получаете ссылку на класс AbstractLogger
.
Теперь я создал класс CustomLogger
, который расширяет AbstractLogger
, чей javadoc говорит:
Базовая реализация Logger. Настоятельно рекомендуется, чтобы любой
Реализация логгера расширяет этот класс.
Вопрос в том, как заставить LogManager.getLogger()
возвращать ссылку на мой класс CustomLogger
вместо класса AbstractLogger
, так что операторы журнала в моих существующих классах не нужно изменять, и я получаю возможность анализировать и измените сообщения, прежде чем они будут зарегистрированы. В настоящее время я продолжаю получать ссылку на AbstractLogger. Я пытаюсь узнать, как Log4j предназначал пользователям расширить свою реализацию.