我正在使用非 .NET 辅助角色,通过在服务定义中设置ProgramEntryPoint进行配置。这意味着我的应用程序中没有 .NET 代码,它是用 Java 和 Python 编写的。
当我在本地运行我的工作角色时,我可以打开 Windows Azure Compute Emulator 应用程序并查看我的工作进程的标准输出和错误。
当我将桌面远程访问到我的 Azure 实例时,我不知道从哪里获得相同的信息。我在哪里可以找到标准输出和错误?
我正在使用非 .NET 辅助角色,通过在服务定义中设置ProgramEntryPoint进行配置。这意味着我的应用程序中没有 .NET 代码,它是用 Java 和 Python 编写的。
当我在本地运行我的工作角色时,我可以打开 Windows Azure Compute Emulator 应用程序并查看我的工作进程的标准输出和错误。
当我将桌面远程访问到我的 Azure 实例时,我不知道从哪里获得相同的信息。我在哪里可以找到标准输出和错误?
一个简单的策略是将程序的输出重定向到一个文件:
<ProgramEntryPoint commandLine="run.bat >> app.log 2>&1" ... "/>
这&
对保持 XML 解析器满意很重要。
请注意,执行此操作后,您将无法再在 Windows Azure Compute Emulator 中看到日志。要查看日志,请打开 PowerShell 并键入:
cd E:\approot # or myapp.csx\roles\WorkerRole\approot if running locally
cat -wait app.log
另请注意,此策略要求您将桌面远程访问 Azure 实例以查看日志。如果有的话,这可能是快速入门的好方法。
直接回答上面的问题:
<ProgramEntryPoint commandLine="run.bat >> app.log 2>&1" ... "/>
当您在计算模拟器中运行上述命令时,您要求将命令 shell 输出重定向到 run.bat 所在的相同位置。就是这样。当您在计算模拟器中启动工作角色时,它会从 CSX 文件夹内的位置启动,并在那里创建 app.log。
现在,如果您使用完全相同的代码并在 Windows Azure 上进行部署,那么当执行“run.bat >> app.log”时,app.log 文件将直接在您的 run.bat 所在的位置创建。你可以在你的 RDP 你的 Azure 实例之后在 E:\Approot\ 找到它。
上述方法是正确的,但策略不正确。这是因为:
最好的策略是将这些由 3rd 方应用程序创建的自定义日志直接传输到 Azure 存储。
在任何有自定义应用程序(即 java.exe、php.exe、python 等)的情况下,我建议直接在“本地存储”文件夹中创建日志文件,然后在 Worker Role (WorkerRole.cs) 中初始化 Azure 诊断以导出这些自定义日志文件直接从 Azure VM 到 Azure Blob 存储。
此处描述了如何在本地存储上创建自定义日志