0

由于Heroku 有只读文件系统,除了两个目录(log 和 tmp),我想将我的日志从 python 应用程序转储到其中一个。

推送到heroku服务器应用程序的git存储库包含我创建的两个文件夹(检查了两次,甚至在推送后下载了应用程序以检查两个目录是否都存在)。在运行“heroku run bash”时,我只能看到“tmp”文件夹 - 使用“ls -la”甚至应用程序都看不到“log”,因为我收到有关 .log 文件丢失位置的错误。

2013-08-05T13:10:41.170434+00:00 heroku[web.1]: Starting process with command `python runserver.py`
2013-08-05T13:10:43.132418+00:00 app[web.1]: Traceback (most recent call last):
2013-08-05T13:10:43.609980+00:00 app[web.1]:   File "runserver.py", line 2, in <module>
2013-08-05T13:10:43.725134+00:00 app[web.1]:     from app_name import app
2013-08-05T13:10:43.850738+00:00 app[web.1]:   File "/app/app_name/__init__.py", line 13, in <module>
2013-08-05T13:10:43.968714+00:00 app[web.1]:     from logger import flask_debug
2013-08-05T13:10:44.081900+00:00 app[web.1]:   File "/app/logger.py", line 8, in <module>
2013-08-05T13:10:44.194540+00:00 app[web.1]:     logging.config.dictConfig(CONFIG)
2013-08-05T13:10:44.306174+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/logging/config.py", line 797, in dictConfig
2013-08-05T13:10:44.425589+00:00 app[web.1]:     dictConfigClass(config).configure()
2013-08-05T13:10:44.535392+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/logging/config.py", line 579, in configure
2013-08-05T13:10:44.274067+00:00 heroku[web.1]: Process exited with status 1
2013-08-05T13:10:44.287252+00:00 heroku[web.1]: State changed from starting to crashed

这么快的想法我想检查我是否可以将日志放在 tmp 文件夹中。应用程序启动,一切看起来都很好......但没有任何东西从应用程序中转储。

实际上,我已经迷失了,因为我已经寻找了很长时间的解决方案。

也许有人会告诉我:

  1. 为什么 /app_name 文件夹下的“log”目录不可见?

  2. 为什么“tmp”目录不接收日志?

    http://speedy.sh/VaR2w/logger.conf - 这是我的记录器的 *.conf 文件 http://speedy.sh/c3QNs/logger.py - 这里是记录器

PS。日志适用于“tmp”文件夹配置的控制台。

4

2 回答 2

0

两种更好的方法:

1) 使用 Heroku 的 logdrain 功能:https ://devcenter.heroku.com/articles/logging#syslog-drains

2) 使用其中一个插件:PapertrailLogly浮现在脑海中,两者都有免费计划。

我使用上面的#1:我设置了一个 ec2 实例,它将我所有测功机的所有日志聚合到一组特定的文件中,我用它logrotate来管理。然后,如果我愿意,我会使用 simplegrep来搜索它们并跟随它们。tail -f我在所述 ec2 实例上的 rsyslogd 配置是:

----- 8< ----- 剪到这里 ----- 8< ----- 剪到这里 ----- 8< ----- 剪到这里 ----- $ModLoad imtcp $InputTCPServerRun 5514

# vi /etc/rsyslog.d/01-heroku.conf
if $syslogtag startswith 'app[postgres]' then /matchspot-logs/postgres
& ~
if $syslogtag startswith 'app[pgbackups]' then /matchspot-logs/postgres
& ~
if $syslogtag startswith 'heroku[' then /matchspot-logs/heroku
& ~
if $syslogtag startswith 'app[' then /matchspot-logs/app
& ~
于 2013-08-06T10:26:56.687 回答
0

当您使用时heroku run,它会启动一个新的测功机,以免降低您的 Web 服务器的性能……这样想,如果您有 2 个 Web 测功机,您会得到哪一个heroku run?:)

这里其他人建议的方法应该对你更好

此外,您应该能够在没有确认帐户的情况下添加免费插件

于 2014-02-22T10:04:42.923 回答