在docker RTS沙箱中使用log4j登录Apache Apex

在docker RTS沙箱中使用log4j登录Apache Apex,docker,logging,log4j,apache-apex,Docker,Logging,Log4j,Apache Apex,我想了解在使用docker中的官方RTS测试沙箱时,如何在ApacheApex中使用log4j查看我的应用程序日志。 更具体地说,我想知道Apex在容器中存储特定于应用程序的日志文件的位置 我正在运行最新的官方docker映像,如下所述: 使用上运行的dtManage,我成功上传并启动了我的应用程序。 在监视器选项卡中,我可以看到我的操作符正在接收和发出元组。 当我单击名为AM logs的蓝色按钮时,它会显示3个日志文件的下拉列表,即: AppMaster.sdterr AppMaster.s

我想了解在使用docker中的官方
RTS测试沙箱时,如何在ApacheApex中使用log4j查看我的应用程序日志。
更具体地说,我想知道Apex在容器中存储特定于应用程序的日志文件的位置

我正在运行最新的官方docker映像,如下所述:

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

  • AppMaster.sdterr
  • AppMaster.stdout
  • apex.log
当我打开并搜索所有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>

dt.attr.DEBUG
真的

有人能帮我一下吗?

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

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

默认情况下,可以在指定的日志目录中找到应用程序日志目录(nodemanager属性Thread.nodemanager.log-dirs用作日志目录位置)。单个容器的日志目录将命名为container_{$container_id}。除了应用程序日志,这些目录还将包含stderr,该容器的stdout和syslog。如果容器在不同的节点上运行,那么日志将在各个节点上运行

${warn.nodemanager.log dirs}/application{appid}

或者,您可以使用以下命令启用“纱线日志聚合”以查找日志

 yarn logs -applicationId ${your-app-id} 
您还可以向属性文件添加属性,以打开特定于应用程序的调试日志

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

dt.loggers.level
您的.application.package.*:DEBUG

`从RTS中,您可以访问各个容器,并可以找到与应用程序主应用程序类似的下拉列表,其中包含特定于容器的日志'。这正是我所缺少的。当点击一个特定的容器时,我可以选择日志文件并查看我的日志。我很高兴你得到了答案,你可能想加入dt-users@googlegroups.com对于RTS特定问题。谢谢,刚刚加入小组:)