1

我正在使用非 .NET 辅助角色,通过在服务定义中设置ProgramEntryPoint进行配置。这意味着我的应用程序没有 .NET 代码,它是用 Java 和 Python 编写的。

当我在本地运行我的工作角色时,我可以打开 Windows Azure Compute Emulator 应用程序并查看我的工作进程的标准输出和错误。

当我将桌面远程访问到我的 Azure 实例时,我不知道从哪里获得相同的信息。我在哪里可以找到标准输出和错误?

4

2 回答 2

1

一个简单的策略是将程序的输出重定向到一个文件:

<ProgramEntryPoint commandLine="run.bat >> app.log 2>&amp;1" ... "/>

&amp;对保持 XML 解析器满意很重要。

请注意,执行此操作后,您将无法再在 Windows Azure Compute Emulator 中看到日志。要查看日志,请打开 PowerShell 并键入:

cd E:\approot # or myapp.csx\roles\WorkerRole\approot if running locally
cat -wait app.log

另请注意,此策略要求您将桌面远程访问 Azure 实例以查看日志。如果有的话,这可能是快速入门的好方法。

于 2012-05-31T04:18:47.810 回答
1

直接回答上面的问题:

<ProgramEntryPoint commandLine="run.bat >> app.log 2>&amp;1" ... "/>

当您在计算模拟器中运行上述命令时,您要求将命令 shell 输出重定向到 run.bat 所在的相同位置。就是这样。当您在计算模拟器中启动工作角色时,它会从 CSX 文件夹内的位置启动,并在那里创建 app.log。

现在,如果您使用完全相同的代码并在 Windows Azure 上进行部署,那么当执行“run.bat >> app.log”时,app.log 文件将直接在您的 run.bat 所在的位置创建。你可以在你的 RDP 你的 Azure 实例之后在 E:\Approot\ 找到它。

上述方法是正确的,但策略不正确。这是因为:

  1. 日志将不会保留在 Azure VM 中 Azure VM 被回收
  2. 您需要 RDP 到 Azure VM 来检查,(如果您有 100 个实例,您会 RDP 到每个实例以获取日志吗?)

最好的策略是将这些由 3rd 方应用程序创建的自定义日志直接传输到 Azure 存储。

在任何有自定义应用程序(即 java.exe、php.exe、python 等)的情况下,我建议直接在“本地存储”文件夹中创建日志文件,然后在 Worker Role (WorkerRole.cs) 中初始化 Azure 诊断以导出这些自定义日志文件直接从 Azure VM 到 Azure Blob 存储。

此处描述了如何在本地存储上创建自定义日志

于 2012-05-31T04:52:48.617 回答