#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