启动ngrok服务器,日志无法同时输出至终端与文件的问题求助
解决pyngrok日志同时输出到终端和文件的问题
你启动ngrok服务器后,日志既没输出到终端也没写入文件,服务器正常运行但无日志输出,可按以下步骤调整配置:
问题代码
from pyngrok import ngrok public_url = ngrok.connect( log_stdout=True, log_file="ngrok.log", log_format="json", log_level="debug", proto="tcp", addr="8080" ) print(public_url) while True: pass
解决方案
1. 先升级pyngrok到最新版本
旧版本可能存在参数兼容性问题,执行升级命令:
pip install --upgrade pyngrok
2. 调整代码实现双端日志输出
下面两种方案任选其一:
方案一:优化参数配置并刷新输出缓冲
通过NgrokConfig统一配置日志参数,同时主动刷新输出缓冲避免日志被阻塞:
from pyngrok import ngrok, conf import sys import time # 配置ngrok日志 ngrok_config = conf.NgrokConfig( log_level="debug", log_format="json", log_file="ngrok.log", log_stdout=True ) # 启动TCP隧道 public_url = ngrok.connect(proto="tcp", addr="8080", config=ngrok_config) print(f"公网地址: {public_url}") # 保持进程运行并定期刷新输出缓冲 while True: sys.stdout.flush() sys.stderr.flush() time.sleep(1)
方案二:手动监听ngrok进程输出
如果方案一仍不生效,可直接捕获ngrok进程的标准输出/错误流,手动打印到终端,同时保留日志文件写入:
from pyngrok import ngrok import threading import sys # 启动隧道,仅配置日志文件和级别 public_url = ngrok.connect( log_level="debug", log_format="json", log_file="ngrok.log", proto="tcp", addr="8080" ) print(f"公网地址: {public_url}") # 定义日志监听函数 def listen_ngrok_logs(process): # 监听标准输出 for line in iter(process.stdout.readline, b''): print(line.decode('utf-8'), end='') sys.stdout.flush() # 监听标准错误 for line in iter(process.stderr.readline, b''): print(line.decode('utf-8'), end='') sys.stderr.flush() # 获取ngrok进程并启动后台线程监听 ngrok_process = ngrok.get_ngrok_process() threading.Thread(target=listen_ngrok_logs, args=(ngrok_process,), daemon=True).start() # 保持主进程运行 while True: pass
说明
- 方案一依赖pyngrok的内置参数,配置更简洁;
- 方案二绕过pyngrok的日志封装,直接对接进程输出,兼容性更强;
- 两种方案都会将日志写入
ngrok.log文件,同时输出到终端。
内容的提问来源于stack exchange,提问作者user19533292
相关产品推荐
相关产品推荐

