我想了解使用官方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个日志文件的下拉列表,分别是:

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

  • 当我打开并搜索所有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/

    10-15 23:41