当我使用heroku run
运行命令时,stdout和stderr似乎只会转到我运行命令的终端。它们不能通过heroku logs
或logdrain查看。
是否有一种方法可以使heroku run
的输出与来自调度程序的日志相同?
重现步骤
在一个终端中,运行:
$ heroku logs --tail --app my-app
在另一个终端:
$ heroku run python -c "print('hi')" --app my-app Running python -c print('hi')
我的期望:
字"hi"应该通过logdrain以及heroku logs在papertrail中可见-t
实际情况:
输出到终端,它不会在logdrain或其他终端结束。我在日志中得到的只是关于进程启动和退出的元数据。缺少实际的标准输出和标准错误内容。
记录如下:
一次性dynos运行连接到您的终端,
STDIN
和STDOUT
使用逐个字符的TCP连接。这允许您使用像控制台一样的交互式进程。由于STDOUT
将进入您的终端,因此在应用程序日志中记录的唯一事情是dyno的启动和关闭。
你可以使用heroku run:detached
,如果你想从一个一次性的动态输出被捕获到你的日志中,例如
heroku run:detached python -c "print('hi')" --app my-app
当然,这并不适合任何互动的东西,但我不确定记录互动会话是否有意义。