Как изменить сообщение log4j2 до его регистрации?

Я хотел бы иметь возможность выполнять метод для каждого сообщения журнала, который позволит мне динамически изменять это сообщение до его регистрации. Я знаю, что есть фильтры, которые позволяют мне указать, должно ли сообщение быть зарегистрировано или нет, но я не хочу останавливать ведение журнала, я просто хочу изменить его до того, как оно будет зарегистрировано. Как я могу это сделать?

Примечание. Я задал этот вопрос о log4j2, но я также открыт для других популярных фреймворков для ведения журналов Java.


person Hmmmmm    schedule 29.05.2017    source источник


Ответы (2)


Вы можете реализовать свой собственный appender.

http://logging.apache.org/log4j/2.x/manual/appenders.html#RewriteAppender

Просто расширьте текущий Appender, который вы используете, и добавьте нужное вам поведение или просто используйте RewriteAppender

RewriteAppender RewriteAppender позволяет манипулировать LogEvent до того, как он будет обработан другим Appender. Это можно использовать для маскировки конфиденциальной информации, такой как пароли, или для добавления информации в каждое событие. RewriteAppender должен быть настроен с RewritePolicy. RewriteAppender должен быть настроен после всех Appender, на которые он ссылается, чтобы обеспечить его правильное завершение.

person sercasti    schedule 29.05.2017
comment
Я реализовал RewritePolicy, но неправильно его регистрирую. Я попытался выполнить этот пример, но в итоге получил эту ошибку: Невозможно для вызова фабричного метода в классе класса .... Любая идея, как правильно зарегистрировать эту RewritePolicy? - person Hmmmmm; 30.05.2017

Не забудьте фабричный метод :)

    @PluginFactory
    public static MarkerInjectorRewritePolicy createPolicy() {
        return new MarkerInjectorRewritePolicy();
    }

вот рабочий пример в моей учетной записи github: https://github.com/sercasti/Log4j-RewriteAppender/

person sercasti    schedule 30.05.2017