5

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

如果是 Heroku,我会跑heroku logs

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


我试过了

azure site log tail

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

错误:禁止

4

2 回答 2

2

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

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

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

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

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

'ConcurrentLogHandler':{
    'level': 'DEBUG',
    'class': 'cloghandler.ConcurrentRotatingFileHandler',
    'formatter': 'verbose',
    'filename': os.getenv('LOGFILE', 'django.log')
},

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

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

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

这种配置本身仍然不能解决问题,可能是因为根据Python 的文档,在 Windows 下“日志记录会打开具有排他锁的文件”。

于 2013-07-27T12:48:49.900 回答
0

在门户中,您必须为您创建的 VM 启用日志诊断,然后您才能从门户本身读取日志​​。

于 2016-02-24T16:28:05.030 回答