java - 更改 Apache Storm 拓扑的 Log4J 配置

标签 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 附加程序,以集中生产应用程序的日志记录。

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

如何更改不同拓扑的 log4j 配置? (我不想修改每个工作人员上的 log4j.xml)。

最佳答案

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

我不确定如何根据加载的拓扑添加/删除 splunk 附加程序。您也许可以通过编程方式配置 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 。如果您想加载拓扑 jar 中包含的 log4j2.xml,也许可以有条件地从为工作人员设置的系统属性中排除该设置。我认为这需要更改代码,因此您需要在 https://issues.apache.org/jira 上提出问题

关于java - 更改 Apache Storm 拓扑的 Log4J 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50213222/

相关文章:

java - 如何确定 "debug mode"是否启用

apache - 重定向,除非 URL 以特定字符串开头

java - 关闭 HtmlUnit 的 log4j 记录器

tomcat - 在具有安全管理器的 tomcat 中使用 log4j

java - 使用 Java/ICEFaces 转义 url GET 中的 URL 参数

java - spring 如何在spring中使用多个@RequestMapping注解?

java - SWT Tree - 可以降低 native 展开图标吗?

html - 使用 No-IP ddns 和 linux apache 时照片不显示

php - 发出 http GET 请求时出现超时错误

java - "xmlns:log4j"是 <log4j :configuration> tag? 的必需属性吗