Heroku app - 日志文件夹

时间:2013-08-05 13:45:51

标签: python logging heroku flask

作为Heroku has read-only file system,除了两个目录(log和tmp)之外,我想将我的日志从python app转储到其中一个。

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

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 - 这是记录器

  3. PS。日志正在用于“tmp”文件夹配置的控制台。

2 个答案:

答案 0 :(得分:0)

两种更好的方法:

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

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

我使用上面的#1:我设置了一个ec2实例,它将我所有dynos中的所有日志聚合到一组特定文件中,我使用logrotate来管理。然后我使用简单的grep来搜索它们,然后tail -f跟随,如果我愿意的话。我所说的ec2实例上的rsyslogd配置是:

----- 8&lt; -----切在这里----- 8&lt; -----切在这里----- 8&lt; - - - 剪这里 - - - $ 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
& ~

答案 1 :(得分:0)

当你heroku run时,它会旋转一个新的dyno,以免降低你的网络服务器的性能......如果你有两个网络动态,那么就这样想吧,当你{时,你会得到一个{1}}? :)

其他人在这里建议的方法应该更适合你

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