azure - 如何读取Azure日志?

标签 azure

我将一个 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.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:\home\logfiles”的环境变量。

此配置本身仍然无法解决问题,可能是因为,根据 Python's documentation ,在 Windows 下“日志记录使用独占锁打开文件”。

关于azure - 如何读取Azure日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17885428/

相关文章:

azure - 有没有办法从 azure 搜索索引中删除旧数据

asp.net-mvc - 从 MVC 应用程序重定向循环登录 Azure AD

Azure 数据工厂 - 复制事件 - 自动创建表不起作用

c# - 使用 MSAL 获取 claim

azure - 如何停止从 Azure Functions 中的特定函数发送遥测数据?

Azure - 在设置之前为 VM 分配托管标识访问权限

Azure AD 用户注册了密码哈希同步并通过身份验证

python - 安装 pip-2.7

azure - Get-AzureRmRoleAssignment - 拒绝访问指定的 API 版本

azure - 使用 Entity Framework 将 Web api 部署到 Azure,工作了 1 小时,现在出现错误 500