2013-07-26 81 views
4

我将一个Web应用程序推送到Azure。它在我的电脑上工作,但不在Azure上。为了调试它,我想阅读在Azure上打印的应用程序。我如何查看Azure的日志?如何阅读Azure日志?

是它的Heroku,我会跑heroku logs

在Azure的“门户”,我发现一个URL 在Azure的“门户”我发现了一个URL“FTP诊断日志 ” ftp://waws-prod-db3-003.ftp.azurewebsites.windows.net/LogFiles,但无法管理连接到它。我认为我们的poxy办公室防火墙阻止了ftp。


我试图

azure site log tail 

但我得到一个毫无意义的错误消息

error: Forbidden

+0

用示例代码检查我的[更新的答案](http://stackoverflow.com/a/17897972/376366)。 –

回答

2

的Windows Azure网站登录流将在D:/home/logfiles目录流写入到任何文本文件的信息,请网站。所以要求你的应用程序将它的日志文件写入这个目录。流支持是相当通用的,并且可以流式传输LogFiles文件夹下的任何文本文件。但是为了工作,文件需要可读,所以如果它是专门打开的,它将无法工作。

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

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

DjangoWAWSLogging示例项目显示如何做到这一点。见settings.pyviews.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:\家\日志文件”。

此配置本身仍然不能解决问题,可能是因为根据Python's documentation,在Windows下“日志打开带有排他锁的文件”。

0

从门户网站,您必须为您创建的虚拟机启用日志诊断,然后才能从门户网站本身读取日志​​。