使用`heroku run`执行命令时日志缺失问题求助
解决Heroku Run命令输出无法进入日志系统的问题
方法1:使用run:detached启动后台dyno
这是最直接的方案,和Heroku Scheduler的运行机制一致——启动一个独立的、非交互式的一次性dyno,其stdout/stderr会被Heroku日志系统正常捕获,可通过heroku logs或logdrain查看。
执行命令:
heroku run:detached python -c "print('hi')" --app my-app
之后在另一个终端运行heroku logs --tail --app my-app,就能看到输出的"hi",同时logdrain(如Papertrail)也能同步捕获。
方法2:重定向输出到日志系统(保留交互式场景)
如果需要保持本地终端能看到输出,同时让日志系统捕获内容,可以通过管道将输出转发给logger命令(Heroku dyno默认预装该工具):
执行命令:
heroku run "python -c 'print(\"hi\")' 2>&1 | tee >(logger)" --app my-app
2>&1:将stderr合并到stdouttee:保留本地终端输出>(logger):将输出同时发送到Heroku日志系统
为什么默认heroku run无法捕获输出?
heroku run默认是交互式模式,会在本地终端和dyno之间建立双向通信通道,所有stdout/stderr直接回传到本地,不会进入Heroku的集中日志系统。而Scheduler或run:detached启动的是非交互式后台dyno,其输出会像普通Web/Worker dyno一样被日志系统收集。
内容的提问来源于stack exchange,提问作者waterproof
相关产品推荐
相关产品推荐

