15

我在 Heroku Cedar 上部署了一个 rails 3.1 应用程序。我的日志记录有问题。默认的 Rails 日志工作得很好,但是当我执行以下操作时:

logger.info "log this message"

在我的控制器中,Heroku 不记录任何内容。当我部署我的应用程序时,我看到了 heroku 消息“Injecting rails_log_stdout”,所以我认为调用记录器应该可以正常工作。将语句最终放入我的日志中。我还尝试了其他日志级别,例如 logger.error。没有任何效果。有没有其他人看过这个?

4

4 回答 4

35

MBHNYC 的答案效果很好,但是在不更改代码的情况下很难在不同的环境中更改日志级别。您可以在您的代码中使用此代码environments/production.rb来尊重环境变量并具有合理的默认值:

# https://github.com/ryanb/cancan/issues/511
config.logger = Logger.new(STDOUT)
config.logger.level = Logger.const_get((ENV["LOG_LEVEL"] || "INFO").upcase)

使用此命令设置不同的日志级别:

heroku config:set LOG_LEVEL=error
于 2012-05-03T18:12:58.470 回答
20

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

https://github.com/ryanb/cancan/issues/511

基本上,您需要将记录器输出指定到 STDOUT,一些 gem 会干扰记录器并似乎劫持了功能(在我的情况下可以)。

对于点击懒惰,只需将其放在 environment/production.rb 中

config.logger = Logger.new(STDOUT) 
config.log_level = :info
于 2011-11-23T21:21:08.097 回答
4

目前,看起来 heroku 在构建 slug 时注入了这两个插件:

rails_log_stdout - https://github.com/ddollar/rails_log_stdout

rails3_server_static_assets - https://github.com/pedro/rails3_serve_static_assets

发送到预先存在的 Rails 记录器的任何内容都将被丢弃,并且不会在日志中可见。只需添加此内容以供其他任何最终来到这里的人使用。

于 2012-11-01T21:17:57.620 回答
4

正如@MBHNYC 正确解决的那样,问题是您的日志不会进入STDOUT。

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

就放

gem 'rails_12factor', group: :production

在您的 Gemfile 中,bundle就是这样!

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

资料来源:Heroku 上的 Rails 4

于 2015-04-24T19:26:33.127 回答