【问题标题】:Heroku app - log folderHeroku 应用程序 - 日志文件夹
【发布时间】:2013-08-06 06:06:34
【问题描述】:

作为Heroku has read-only file system,除了两个目录(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 - 这里是记录器

附言。日志正在用于“tmp”文件夹配置的控制台。

【问题讨论】:

  • 我通常讨厌这种 cmets,但是:您能分享一下通过将日志写入磁盘来实现的具体目标吗?任何时候测功机启动时,日志都会“消失”(大约每天一次),另外,如果您有多个测功机,他们将写入不同的日志,如果您手动重新启动测功机等......如果您想从您的应用程序中持久保存日志自己用还有更好的办法。
  • 我有点担心这可能是答案,因为 heroku 按照您的回复工作。虽然我仍然很好奇为什么在写我应该可以访问它的时候看不到/log,为什么即使应用程序没有重新启动,/tmp 中也没有日志。你有什么更好的方法? :)

标签: python logging heroku flask


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    两种更好的方法:

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

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

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

    ----- 8

    # 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
    & ~
    

    【讨论】:

    • 很遗憾我没有信用卡,而且未经验证 Heroku 不会让我添加任何东西,即使它是免费的。虽然谢谢你的建议:)
    • 你确定吗?甚至没有日志排水管?确定吗?
    • 我无法打开redis,我也只是尝试了loggly。问题是,即使使用基本插件是免费的,它也不会在没有帐户验证的情况下打开 - 只能通过信用卡:(
    • 重新阅读我的建议:使用 log drains(我的答案中的选项 1)。它不是附加组件,您可以将日志定向到微型 ec2 实例,该实例是免费的。
    猜你喜欢
    • 2019-02-15
    • 1970-01-01
    • 2019-01-03
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    相关资源
    最近更新 更多