我想了解我在使用官方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>