使用docker RTS沙盒中的log4j在Apache Apex中记录



我想了解我在使用官方RTS Test Sandbox in docker时如何在Apache Apex中使用Log4J看到我的应用程序日志。更具体地说,我想知道Apex在容器内的应用程序特定的日志文件中存储在哪里。

我正在运行最新的官方Docker映像:https://hub.docker.com/r/datatorent/rts/

使用http://localhost上运行的dtManage:9090/,我成功上传了我的应用程序并启动了它。在Monitor选项卡中,我可以看到我的操作员正在接收和发射元组。当我单击称为AM logs的蓝色按钮时,它显示了3个log-files的下拉列表,即:

  • appmaster.sdterr
  • appmaster.stdout
  • apex.log

当我打开并搜索所有3个文件的日志时,我可以看到Apex的大量日志,但是我的自定义应用程序日志都没有打印出来。我的记录代码看起来像这样:

private static final Logger LOG = LoggerFactory.getLogger(Application.class);
LOG.info("helloworld");

在本地模式下运行应用程序时,我的所有日志都在控制台内看到。

properties.xml i还启用了完整调试:

  <property>
    <name>dt.attr.DEBUG</name>
    <value>true</value>
  </property>

有人可以在这里帮我吗?

如果将日志添加到application.java中,则在其中添加了操作员和流到DAG中。它实际上在Apex应用程序的启动时间运行,日志可以是dt-gateway.log的一部分(可以在〜/.dt/logs。)

如果您在操作员中有记录语句,则可以在单个容器日志目录中找到这些语句。(从RTS,您可以访问单个容器,并且可以找到与具有特定容器日志的应用程序主的类似的下拉列表)。

在默认情况下,可以在YARN指定的日志目录中找到日志目录(NodeManager属性yarn.nodemanage.log-dirs用作log Directory位置)。个体容器的日志目录将命名为container _ {$ container_id}。使用应用程序日志,这些目录还将包含该容器的stderr,stdout和syslog。如果容器在不同的节点上运行,则日志将在单个节点上。

$ {yarn.nodemanager.log-dirs}/application _ $ {appid}

或者您可以打开纱线日志聚合以使用以下命令找到日志。

 yarn logs -applicationId ${your-app-id} 

您还可以将属性添加到属性文件中以打开特定应用程序的调试日志。

 <property>
    <name>dt.loggers.level</name>
    <value>your.application.package.*:DEBUG</value>
  </property>

相关内容

  • 没有找到相关文章

最新更新