更改Apache Storm拓扑的Log4J配置

时间:2018-05-07 11:32:21

标签: java apache log4j apache-storm

我目前正在使用以下命令以编程方式通过我的Java应用程序提交Storm拓扑:

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

在我的场景中,我有两种拓扑。测试拓扑和生产拓扑。对于这两种拓扑,我需要不同类型的日志记录。虽然测试拓扑以TRACE级别运行,但生产拓扑将以INFO级别运行。此外,我要求生产拓扑配置SPLUNK Log4J2 appender,以集中生产应用程序的日志记录。

为此,我在我的拓扑JAR中包含了一个log4j.xml文件,用于配置SPLUNK appender。但是,服务器不遵守log4j.xml文件。相反,Storm Server似乎使用自己的配置。

如何更改不同拓扑的log4j配置? (我不想修改每个worker的log4j.xml。)

1 个答案:

答案 0 :(得分:0)

您可以使用https://storm.apache.org/releases/2.0.0-SNAPSHOT/dynamic-log-level-settings.html为每个拓扑设置日志级别。

我不确定如何根据加载的拓扑添加/删除splunk appender。您可以以编程方式https://logging.apache.org/log4j/2.x/manual/customconfig.html配置log4j,并将worker上的log4j2.configurationFactory系统属性设置为指向配置工厂(可以通过将其添加到您的topology.worker.childopts属性中来实现此目的。拓扑配置)。

仅针对上下文,这里是Storm设置导致Log4j加载worker log4j配置https://github.com/apache/storm/blob/4137328b75c06771f84414c3c2113e2d1c757c08/storm-server/src/main/java/org/apache/storm/daemon/supervisor/BasicContainer.java#L560的系统属性的地方。如果要加载拓扑jar中包含的log4j2.xml,可能有条件地从为工作者设置的系统属性中排除该设置。我认为这需要更改代码,因此您需要在https://issues.apache.org/jira

上提出问题