部署于Azure App Services的Flask应用运行约30分钟后停止收集日志
Flask应用Azure App Service日志停止收集排查方案
可能原因及排查步骤
1. 进程回收导致日志handler未重新初始化
Azure App Service默认闲置30分钟会回收进程,即便应用看起来仍在运行,也可能是新进程启动后,你的日志初始化代码仅在首次启动时执行,未给新进程重新添加FileHandler:
- 查看Kudu的
/home/LogFiles/Application目录,确认是否有新生成的日志文件 - 检查App Service诊断日志中的进程启停记录,验证是否存在进程重启情况
2. 文件句柄或存储配额问题
- 代码未显式关闭日志文件句柄,长时间运行可能耗尽系统文件句柄,导致无法写入日志
/home目录虽为持久化存储,但免费/基础层存在存储配额限制,日志文件过大可能触发限制- 排查操作:
- 在Kudu控制台执行
lsof | grep <你的日志文件名>,查看是否有多个进程占用目标日志文件 - 检查日志文件大小,确认是否超出App Service存储配额
- 在Kudu控制台执行
3. Logger配置冲突或重复添加问题
直接修改根logger容易和Flask自带日志handler冲突,且进程重启后可能未重新绑定handler:
- 改用专属logger实例,避免干扰根logger,同时防止重复添加handler:
logger = logging.getLogger('my_app_logger') logger.setLevel(logging.INFO) # 仅在无handler时添加,避免重复绑定 if not logger.handlers: file_handler = logging.FileHandler(log_file) file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') file_handler.setFormatter(file_formatter) logger.addHandler(file_handler) logger.info('*** Logging Started') - 后续业务日志统一使用该
logger实例输出,不要用logging.info这类根logger方法
4. App Service日志配置问题
- 检查App Service的日志设置:确认「应用日志记录(文件系统)」已开启,日志级别设置为
Info或更低级别 - 尝试开启「应用日志记录(Blob存储)」,若Blob中的日志正常收集,说明问题出在文件系统层面;若同样中断,则是应用代码问题
5. 存储路径有效性问题
- 确认
path指向的是/home/LogFiles持久化目录,若使用临时存储(如/tmp),进程回收时临时存储会被清空,导致日志写入中断
内容的提问来源于stack exchange,提问作者PK Przemek
相关产品推荐
相关产品推荐

