1

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

我正在运行最新的官方 docker 映像,如下所述:https ://hub.docker.com/r/datatorrent/rts/

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

  • AppMaster.sdterr
  • AppMaster.stdout
  • 顶点日志

当我打开并搜索所有 3 个文件的日志时,我可以看到很多来自 apex 的日志,但没有打印我的自定义应用程序日志。我的日志记录代码如下所示:

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

本地模式下运行应用程序时,我的所有日​​志都在控制台中可见。

在 properties.xml 中,我还启用了完整调试:

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

有人可以帮我吗?

4

1 回答 1

1

如果您将日志添加到 Application.java,您将在其中将运算符和流添加到 DAG。它实际上在 Apex 应用程序的启动时运行,并且日志可以是 dt-gateway.log 的一部分(可以在 ~/.dt/logs 中找到。)

如果您在操作员中有日志记录语句,您将在各个容器日志目录中找到这些语句。(从 RTS 中,您可以访问单个容器,并且可以找到与 Application Master 类似的下拉菜单以及容器特定日志)。

默认情况下,应用程序日志目录可以在yarn指定的日志目录中找到(nodemanager属性yarn.nodemanage.log-dirs用作日志目录位置)。各个容器的日志目录将被命名为container_{$container_id}。与应用程序日志一起,这些目录还将包含该容器的标准错误、标准输出和系统日志。如果容器在不同的节点上运行,那么日志将在各个节点上。

${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>
于 2017-11-27T02:48:20.663 回答