我将一个 Web 应用程序推送到了 Azure。它可以在我的计算机上运行,但不能在 Azure 上运行。为了调试它,我想阅读应用程序在 Azure 上打印的内容。如何查看 Azure 的日志?
如果是 Heroku,我会运行 heroku 日志
在 Azure“门户”上我找到了一个 URL 在Azure“门户”中,我发现了一个URL“FTP诊断日志” 'ftp://waws-prod-db3-003.ftp.azurewebsites.windows.net/LogFiles但无法连接到它。我认为我们的 poxy Office 防火墙阻止了 ftp。
<小时/>我试过了
azure site log tail
但我收到一条毫无意义的错误消息
error: Forbidden
最佳答案
Windows Azure 网站日志流式传输会将写入网站 D:/home/logfiles
目录中任何文本文件的信息流式传输。因此,要求您的应用程序将其日志文件写入此目录。流式传输支持相当通用,可以流式传输 LogFiles 文件夹下的任何文本文件。但要使其工作,该文件需要可读,因此如果以独占方式打开该文件,则该文件将无法工作。
在 Python 中,考虑到应用程序可能有多个实例同时运行,因此文件锁定可能是一个问题,因此这可能有点困难。
解决此问题的方法是使用 ConcurrentLogHandler ,这将允许对日志文件进行并发写访问。这需要pywin32 (Python for Windows 扩展),默认情况下不会安装在 Windows Azure 网站上,因此您必须在应用程序中包含该依赖项。请务必包含 Windows Azure 网站使用的 Python 运行时的适当版本(目前为 Python 2.7 32 位)。
DjangoWAWSLogging示例项目展示了如何做到这一点。请参阅settings.py和 views.py 。正如项目 README 中所述,此时只能在网站停止的情况下下载日志。这可能是由于 ConcurrentLogHandler 以独占模式打开文件。引用this question .
来自 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's documentation ,在 Windows 下“日志记录使用独占锁打开文件”。
关于azure - 如何读取Azure日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17885428/