在docker RTS沙箱中使用log4jloginApache Apex

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

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

使用在http:// localhost:9090 /上运行的dtManage ,我成功上传了我的应用程序并启动了它。 在Monitor选项卡中,我可以看到我的操作员正在接收和发送元组。 当我点击名为AM logs的蓝色buttonAM logs ,会显示3个日志文件的下拉菜单,分别是:

  • AppMaster.sdterr
  • AppMaster.stdout
  • apex.log

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

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

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

在properties.xml中,我也启用了全面的debugging:

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

有人可以帮我吗?

如果您要将日志添加到要向DAG添加运算符和stream的Application.java中。 它在Apex应用程序启动时实际运行,日志可以是dt-gateway.log的一部分(可以在〜/ .dt / logsfind)。

如果在操作员中有日志logging,则可以在各个容器日志目录中find它们。 (从RTS你可以访问单个容器,并可以find与容器特定日志相似的应用程序主文件下拉菜单)。

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

$ {yarn.nodemanager.log – 迪尔斯} /应用_ $ {} APPID

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

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

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

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