Windows Azure 网站日志流式传输将写入D:/home/logfiles
网站目录中任何文本文件的信息。所以要求是您的应用程序将其日志文件写入此目录。流式支持相当通用,可以流式传输位于 LogFiles 文件夹下的任何文本文件。但是要让它工作,文件需要是可读的,所以如果它是独占打开的,它将无法工作。
在 Python 中,考虑到您的应用程序可能有多个实例同时运行,这可能有点挑战性,因此文件锁定可能是一个问题。
一种解决方法是使用ConcurrentLogHandler,这将允许对日志文件进行并发写访问。这需要pywin32(用于 Windows 扩展的 Python),Windows Azure 网站上默认没有安装它,因此您必须在应用程序中包含该依赖项。请务必包含适用于 Windows Azure 网站使用的 Python 运行时的版本(此时为 Python 2.7 32 位)。
DjangoWAWSLogging示例项目展示了如何做到这一点。请参阅settings.py和views.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 下“日志记录会打开具有排他锁的文件”。