Пользовательская оболочка для log4j2

Я хочу создать оболочку вокруг log4j2, чтобы сделать следующее: 1) есть около 6 обязательных полей, таких как event_name, action, desc и т. д. 2) некоторые поля, я хочу, чтобы они использовали только определенные значения, например enum 3) журнал должен быть создается в парах ключ-значение для Splunk.

Ниже приведен мой подход: 1) Создан класс CustomLogger, принимающий обязательные поля, регистратор и поля переменных в качестве значения ключа. 2) Пользователи могут вызывать методы, как показано ниже:

CustomLogger.info(logger, transactionId, app_name, event_name,
                "inside the loop", "inside the loop of the sample app",
                CustomLogger.Result.success, "looped in", "loop_count",
                String.valueOf(i));

Определение метода:

public static String log(LogLevel logLevel, Logger logger,
        String transactionId, String app_name, String event_name,
        String action, String desc, Result result, String reason,
        String... addtnlFields)

Проблемы с подходом: 1) Не расширять log4j, не уверен, что это правильный путь 2) нужно передать регистратор из каждого класса. Если этого можно избежать 3) метод и номер строки теряются, так как он вызывается из другого метода

Это будет широко использоваться в моих внутренних приложениях, поэтому хочу сделать это правильно. Подходит ли этот подход или есть лучший подход?


person Sibish    schedule 26.06.2014    source источник


Ответы (1)


Взгляните на генератор кода, прикрепленный к этой Jira: https://issues.apache.org/jira/browse/LOG4J2-519

Возможно, вы можете использовать это как базовый класс? Дает вам немного более приятный API. (Мне все еще нужно обновить это, чтобы отразить некоторые изменения API в log4j-2.0-rc2...)


ОБНОВИТЬ

Другой подход заключается в том, чтобы иметь пользовательскую реализацию интерфейса Message, определенную в модуле API log4j2. Ваше пользовательское сообщение будет иметь конструктор со всеми полями, которые вы определяете по мере необходимости, а метод toString (и, возможно, некоторые другие методы) будет форматировать эти поля, как вам нужно, в пары ключ-значение.

person Remko Popma    schedule 27.06.2014