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

#log4j2

#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) метод и номер строки теряются, поскольку он вызывается из другого метода

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

Ответ №1:

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

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


Обновить

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

Комментарии:

1. подняли тикет Log4j 2LOG4J2-695 issues.apache.org/jira/browse/LOG4J2-695

2. Большое спасибо Ремко и Ральфу за ответы на все вопросы и предоставление решения для пользовательского регистратора поверх log4j2 с Splunk CIM. Билет Jira содержит все детали: issues.apache.org/jira/browse/LOG4J2-695