同一Python文件中Flask与gRPC共存时无法查看gRPC函数日志求助
解决gRPC函数日志不显示的问题
原因分析
Flask的debug=True模式会触发自动重启机制:它会先启动父进程,再fork出子进程运行Flask应用。你的gRPC线程在父进程中启动,控制台输出被子进程的Flask日志占据,同时线程中的print()输出可能因缓冲或进程隔离无法显示到当前控制台。
解决办法
方法1:关闭Flask Debug模式
直接修改app.run参数,关闭Debug模式后进程不会重启,gRPC线程的print()输出可正常显示:
app.run(debug=False, port=POST_PORT)
方法2:保留Debug但禁用自动重启
如果需要保留Debug的代码热重载等功能,添加use_reloader=False参数关闭自动重启:
app.run(debug=True, port=POST_PORT, use_reloader=False)
方法3:改用标准日志模块替代print
使用Python内置logging模块,能更好处理多线程日志输出,还可配置输出到文件:
- 先配置日志:
import logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(threadName)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__)
- 在gRPC函数中替换
print()为:
logger.info("gRPC请求处理日志")
方法4:强制刷新print缓冲
如果坚持用print(),在语句后添加flush=True强制刷新输出缓冲:
print("gRPC函数日志内容", flush=True)
验证
修改后重新运行python3 post_service_server.py,调用gRPC接口即可在控制台看到对应日志。
内容的提问来源于stack exchange,提问作者Nam Anh
相关产品推荐
相关产品推荐

