如何读取 Azure 日志?

Col*_*nic 5 azure

我将一个 Web 应用程序推送到 Azure。它适用于我的计算机,但不适用于 Azure。为了调试它,我想阅读应用程序在 Azure 上打印的内容。如何查看 Azure 的日志?

如果是 Heroku,我会跑 heroku logs

在 Azure 'portal' 上我找到了一个 URL 在 Azure 'portal' 中我找到了一个 URL 'FTP DIAGNOSTIC LOGS' ftp://waws-prod-db3-003.ftp.azurewebsites.windows.net/LogFiles但不能设法连接到它。我认为我们的 poxy 办公室防火墙阻止了 ftp。


我试过

azure site log tail
Run Code Online (Sandbox Code Playgroud)

但我收到一条毫无意义的错误信息

错误:禁止

Fer*_*eia 2

Windows Azure 网站日志流会将写入D:/home/logfiles网站目录中任何文本文件的信息流式传输。因此,要求您的应用程序将其日志文件写入此目录。流式传输支持相当通用,可以流式传输 LogFiles 文件夹下的任何文本文件。但要使其工作,该文件需要可读,因此如果以独占方式打开该文件,则该文件将无法工作。

\n\n

在 Python 中,考虑到应用程序可能有多个实例同时运行,因此文件锁定可能是一个问题,因此这可能有点困难。

\n\n

解决此问题的方法是使用ConcurrentLogHandler,它将允许对日志文件进行并发写入访问。这需要pywin32(Python for Windows 扩展),默认情况下 Windows Azure 网站上不安装它,因此您必须在应用程序中包含该依赖项。请务必包含 Windows Azure 网站使用的 Python 运行时的适当版本(目前为 Python 2.7 32 位)。

\n\n

DjangoWAWSLogging示例项目展示了如何做到这一点。请参阅settings.pyviews.py。正如项目的README中所解释的,此时日志只能在网站停止时才能下载。这可能是由于 ConcurrentLogHandler 以独占模式打开文件。参考这个问题

\n\n

此片段使用环境变量作为文件名来settings.py配置日志处理程序:LOGFILE

\n\n
\'ConcurrentLogHandler\':{\n    \'level\': \'DEBUG\',\n    \'class\': \'cloghandler.ConcurrentRotatingFileHandler\',\n    \'formatter\': \'verbose\',\n    \'filename\': os.getenv(\'LOGFILE\', \'django.log\')\n},\n
Run Code Online (Sandbox Code Playgroud)\n\n

由于日志流可以同时处理多个文件,因此让每个网站实例日志到不同的文件可能是更好的策略,如下所示:

\n\n
\'handlers\': {\n    \'logfile\': {\n        \'level\':\'DEBUG\',\n        \'class\':\'logging.handlers.RotatingFileHandler\',\n        \'filename\': os.path.join(os.getenv(\'LOGPATH\', "."), str(uuid.uuid1()) + ".log"),\n        \'maxBytes\': 1024 * 1024,\n        \'backupCount\': 9,\n        \'formatter\': \'standard\',\n    },\n},\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中 LOGPATH 是在 Windows Azure 网站中配置为“D:\\home\\logfiles”的环境变量。

\n\n

此配置本身仍然无法解决问题,可能是因为根据Python 文档,在 Windows 下“日志记录使用独占锁打开文件”。

\n