Измените конфигурацию Log4J для топологии Apache Storm - PullRequest
0 голосов
/ 07 мая 2018

В настоящее время я отправляю топологии Storm программно через мое Java-приложение, используя следующую команду:

Nimbus.Client client = NimbusClient.getConfiguredClient(stormConfigProvider.getStormConfig()).getClient();
client.submitTopology(
        this.topologyID.toString(),
        stormJarManager.getRemoteJarLocation(),
        JSONValue.toJSONString(stormConfigProvider.getStormConfig()),
        topology
);

В моем сценарии у меня есть два вида топологий. Тестирование топологий и производственных топологий. Для обоих видов топологий мне требуются разные типы журналирования. В то время как топологии тестирования работают с уровнем TRACE, производственные топологии будут работать с уровнем INFO. Кроме того, мне требуется, чтобы в рабочих топологиях был настроен приложение SPLUNK Log4J2 для централизации ведения журнала моего производственного приложения.

Для этого я включил файл log4j.xml в свой JAR-файл топологии, который настраивает приложение SPLUNK. Однако файл log4j.xml не учитывается Сервером. Вместо этого Storm Server, похоже, использует свою собственную конфигурацию.

Как мне изменить конфигурацию log4j для разных топологий? (Я не хочу изменять log4j.xml для каждого работника).

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете использовать https://storm.apache.org/releases/2.0.0-SNAPSHOT/dynamic-log-level-settings.html, чтобы установить уровни журналов для каждой топологии.

Я не уверен, как вы добавите / удалите добавленный аппендидер на основе загруженной топологии. Возможно, вы сможете настроить log4j программно https://logging.apache.org/log4j/2.x/manual/customconfig.html и установить системное свойство log4j2.configurationFactory на своих рабочих, чтобы оно указывало на вашу фабрику конфигурации (вы можете сделать это, добавив его к свойству topology.worker.childopts в конфигурации топологии) .

Просто для контекста, здесь Storm устанавливает системное свойство, которое заставляет Log4j загружать рабочую конфигурацию log4j https://github.com/apache/storm/blob/4137328b75c06771f84414c3c2113e2d1c757c08/storm-server/src/main/java/org/apache/storm/daemon/supervisor/BasicContainer.java#L560. Если вы хотите загрузить log4j2.xml, включенный в ваш файл топологии, возможно, будет возможно условно исключить этот параметр из системных свойств, установленных для рабочих. Я думаю, что это потребует изменения кода, поэтому вам нужно поднять проблему на https://issues.apache.org/jira

...