我想了解使用官方RTS Test Sandbox in docker
时如何在Apache Apex中使用log4j查看应用程序日志。
更具体地说,我想知道Apex将特定于应用程序的日志文件存储在容器中的位置。
我正在运行最新的官方docker镜像,如下所述:https://hub.docker.com/r/datatorrent/rts/
使用在http://localhost:9090/上运行的dtManage
,我成功上传了我的应用程序并启动了它。
在Monitor
选项卡中,我可以看到我的运算符正在接收和发出元组。
当我单击名为AM logs
的蓝色按钮时,它显示了3个日志文件的下拉列表,分别是:
当我打开并搜索所有3个文件的日志时,可以看到很多来自apex的日志,但是没有打印我的自定义应用程序日志。
我的日志记录代码如下所示:
private static final Logger LOG = LoggerFactory.getLogger(Application.class);
LOG.info("helloworld");
在Local Mode中运行该应用程序时,虽然我的所有日志在控制台内都是可见的。
在properties.xml中,我还启用了完整调试:
<property>
<name>dt.attr.DEBUG</name>
<value>true</value>
</property>
有人可以帮我吗?
最佳答案
如果要将日志添加到Application.java,则将操作符和流添加到DAG。它实际上在Apex应用程序启动时运行,并且日志可以是dt-gateway.log的一部分(可以在〜/ .dt / logs中找到。)
如果操作员中有日志记录语句,则可以在各个容器的日志目录中找到这些语句。 (从RTS,您可以访问各个容器,并且可以找到与Application Master相似的下拉列表,其中包含特定于容器的日志)。
缺省情况下,应用程序日志目录可以在yarn指定的日志目录中找到(使用nodemanager属性yarn.nodemanage.log-dirs作为日志目录位置)。各个容器的日志目录将命名为container _ {$ container_id}。 ,这些目录还将通过该容器包含stderr,stdout和syslog。如果容器在不同的节点上运行,则日志将在各个节点上。
$ {yarn.nodemanager.log-dirs} / application _ $ {appid}
或者,您可以使用以下命令打开 yarn 日志聚合以查找日志。
yarn logs -applicationId ${your-app-id}
您还可以将属性添加到属性文件中,以打开特定于应用程序的调试日志。
<property>
<name>dt.loggers.level</name>
<value>your.application.package.*:DEBUG</value>
</property>
关于docker - 在docker RTS沙箱中使用log4j登录Apache Apex,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47498059/