我将网络应用推送到Azure。它在我的计算机上运行,但在Azure上运行。为了调试它,我想阅读在Azure上打印的应用程序。如何查看Azure的日志?
如果是Heroku,我会跑heroku logs
在Azure“门户网站”上,我找到了一个网址 在Azure“门户网站”中,我找到了一个URL'FTP诊断日志 'ftp://waws-prod-db3-003.ftp.azurewebsites.windows.net/LogFiles但无法连接到它。我认为我们的poxy办公室防火墙阻止了ftp。
我试过
azure site log tail
但是我收到了无意义的错误消息
错误:禁止
答案 0 :(得分:2)
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"日志记录打开带有排他锁的文件"。
答案 1 :(得分:0)
在门户网站中,您必须为您创建的VM启用日志诊断,然后您才能从门户网站本身读取日志。