Heroku日志记录不工作

Heroku日志记录不工作,heroku,ruby-on-rails-3.1,cedar,Heroku,Ruby On Rails 3.1,Cedar,我已经在Heroku Cedar上部署了rails 3.1应用程序。我的日志记录有问题。默认rails日志工作正常,但当我执行以下操作时: logger.info "log this message" 在我的控制器中,Heroku不记录任何东西。当我部署我的应用程序时,我看到heroku消息“injectionrails\u log\u stdout”,因此我认为调用记录器应该可以正常工作。将语句放在我的日志中。我还尝试了其他日志级别,如logger.error。什么都不管用。还有人看到过吗?

我已经在Heroku Cedar上部署了rails 3.1应用程序。我的日志记录有问题。默认rails日志工作正常,但当我执行以下操作时:

logger.info "log this message"

在我的控制器中,Heroku不记录任何东西。当我部署我的应用程序时,我看到heroku消息“injectionrails\u log\u stdout”,因此我认为调用记录器应该可以正常工作。将语句放在我的日志中。我还尝试了其他日志级别,如logger.error。什么都不管用。还有人看到过吗?

我也遇到了同样的问题,通过使用这里的技术解决了这个问题:

基本上,您需要将记录器输出指定给STDOUT,一些gem会干扰记录器并似乎劫持了功能(在我的例子中是cancan)

对于单击lazy,只需将其放在environments/production.rb中

config.logger=logger.new(标准输出)
config.log_level=:info

MBHNYC的答案非常有效,但如果不更改代码,就很难在不同的环境中更改日志级别。您可以在
环境/production.rb
中使用此代码来遵守环境变量,并具有合理的默认值:

#https://github.com/ryanb/cancan/issues/511
config.logger=logger.new(标准输出)
config.logger.level=logger.const_get((ENV[“LOG_level”]| |“INFO”).upcase)
使用此命令可设置不同的日志级别:

heroku config:set LOG_LEVEL=error

目前,heroku在构建slug时似乎注入了这两个插件:

轨道日志

rails3\u服务器\u静态\u资产-


发送到预先存在的Rails记录器的任何内容都将被丢弃,并且在日志中不可见。只需添加此项,就可以为其他任何到此结束的人提供完整性。

正如@MBHNYC正确指出的,问题是您的日志不会被标准输出

Heroku没有手动配置所有这些东西,而是提供了一个可以为您完成所有这些工作的工具

gem 'rails_12factor', group: :production
在您的GEM文件中,
bundle
,就是这样

注意:这适用于Rails 3和Rails 4


来源:

Heroku的支持也将我引向了类似的方向。下面是一个他们声称导致这个问题的gem列表:acts\u as\u audited,on\u the \u spot,restful\u jsonp,authlogic,cancan,simple navigation第二行应该是
config.logger.level=logger::INFO
,这是一个更好的解决方案。我将其修改为
upcase
字符串,然后将其传递给
const\u get
,该字符串区分大小写。否则,如果您将
LOG\u LEVEL
变量设置为小写值,则可能会从Heroku收到错误:
2012-12-05T21:38:14+00:00应用程序[worker.1]:错误的常量名debug
。目前,这样做似乎更好:
config.log\u level=ENV['log\u level']?ENV['LOG_LEVEL'].to_sym::info
@user664833:我已经更新了答案,以明确LOG_LEVEL不再受到Heroku的任何特殊待遇。将其设置为符号而不是常量有什么优势?我倾向于选择“我在生产中得到的”作为我的答案,所以我知道它们是有效的,但我现在很好奇。@PhilCalvin,在Rails
4
中,默认的
config/environments/production.rb
使用了一个符号(
config.log\u level=:info
),所以我也这样做了。出于品味的考虑,我发现我之前评论中的代码看起来更干净。而且
upcase
的大小写和使用现在也成了遗物。此外,在Rails
4
中,您可能会使用,这取决于,它确保您的日志将发送到standard out。请注意,
rails\u stdout\u日志记录也支持rails
3
。这是错误的。Heroku所做的是将自己的输出转储到标准输出。这就是为什么你要把你的rails设置为转储到stdout中,也就是为了澄清,我说的你认为哪部分是错的?是的,heroku将输出发送到标准输出。该插件通过将记录器替换为记录到stdout的记录器来解决此问题。在将记录器替换为原来的Rails记录器之前记录的任何内容都将永远不可见。抱歉,我不确定在这一点上它到底是如何工作的。顺便说一句,你在回答中提到的插件不是Heroku目前使用的插件injects@geekazoid下面的答案是正确的。天哪,谢谢你。只是浪费了一天的调试时间,因为我将这个gem分组到了错误的环境中,所以没有显示日志。