【问题标题】:Change Log4J Configuration for Apache Storm Topology更改 Apache Storm 拓扑的 Log4J 配置
【发布时间】:2018-10-17 04:50:40
【问题描述】:

我目前正在使用以下命令通过我的 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 附加程序。但是,服务器不支持 log4j.xml 文件。相反,Storm Server 似乎使用了自己的配置。

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

【问题讨论】:

    标签: java apache log4j apache-storm


    【解决方案1】:

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

    我不确定您将如何根据加载的拓扑添加/删除 splunk appender。您可能能够以编程方式配置 log4j https://logging.apache.org/log4j/2.x/manual/customconfig.html 并在您的工作人员上设置 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 上提出问题

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 2021-06-02
      • 1970-01-01
      相关资源
      最近更新 更多