Rails 3在开发环境下无法记录日志

5
我已经尝试调用logger.debugRails.logger.debug,但是没有输出到development.log文件中。有什么想法吗? 更新 我还应该说明一下,我是从控制器中调用此函数,其他信息例如SQL查询已经被输出到日志文件中。 源代码

https://github.com/kyledecot/skateparks-web

Gemfile

source 'http://rubygems.org/'

gem 'rails', '3.0.7'
gem 'rake', '~> 0.8.7'
gem 'devise'
gem 'omniauth'
gem 'flash_cookie_session'
gem 'carrierwave'
gem 'mini_magick'
gem 'barometer'
gem 'gdata_19', :require => 'gdata'
gem 'google_places'
gem 'fleakr'
gem 'resque'
gem 'nokogiri'
gem 'decent_exposure'
gem 'cancan'
gem 'friendly_id'
gem 'breadcrumbs_on_rails'
gem 'defensio'
gem 'twitter'
gem 'thinking-sphinx', :require => 'thinking_sphinx'
gem 'ts-resque-delta', '1.0.0', :require => 'thinking_sphinx/deltas/resque_delta'
gem 'mime-types', :require => 'mime/types'
gem 'vpim'
gem 'will_paginate', '~> 3.0.pre2'
gem 'acts_as_geocodable'
gem 'acts_as_audited', '2.0.0.rc7'
gem 'passenger'
gem 'paper_trail'
gem 'thin'
gem 'compass', '>= 0.11.1'
gem 'guard-compass'
gem 'redcarpet'
gem 'mysql2', '0.2.7'
gem 'placemaker'

group :development, :test do

  gem 'sqlite3'
  gem 'capybara'  
  gem 'launchy'
  gem "rspec-rails"
  gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i
  gem 'guard-rspec'
  gem 'guard-bundler'
  gem 'guard-delayed'
  gem 'factory_girl'
  gem 'rspec'

end

group :production do 
end

enviornment.rb

require File.expand_path('../application', __FILE__)
Skateparks::Application.initialize!
ActiveRecord::Base.logger.level = Logger::INFO

ImagesController

def server
  logger.warn "WARN!" # nothing
  logger.info "INFO!" # nothing
  logger.debug "DEBUG!" # nothing
  puts Rails.logger.inspect # shows
  puts "PUTS!" # shows
end

使用rails s的日志输出

#<ActiveSupport::BufferedLogger:0x000001058867a0 @level=0, @buffer={}, @auto_flushing=1, @guard=#<Mutex:0x000001058866b0>, @log=#<File:/Users/Kyle/Desktop/skateparks-web/log/development.log>>
PUTS!


Started GET "/images/fd3b38315c30532b3a55bb84d35e5925/34_m.png" for 127.0.0.1 at 2011-06-29 03:41:50 -0400
  User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1

我们至少需要一些代码,你没有给我们任何信息。 - Dhaivat Pandya
你确定你正在开发环境中运行吗? - sevenseacat
你使用 logger.info 或 logger.warn 会得到输出吗? - ipd
2
"puts Rails.logger.inspect" 的输出是什么? - Matt
1
“LoggerStub”错误很奇怪……我不知道这是否指向Rspec对应用程序做了什么坏事,或者它只是一个误导 :-/ - Pavling
显示剩余19条评论
2个回答

10

更新:

Viget Labs已经将loggable gem从他们的代码库中移除 ( https://github.com/vigetlabs/loggable )


你的应用程序中有些gem正在使用vigetlabs/loggable gem。通过查看Gemfile.lock,似乎“fleakr”gem正在使用它。

我注意到虽然logger.info "hello"无法正常工作,但Rails.logger.info "hello"可以正常工作。

似乎loggable gem正在使用LoggerStub来重新定义日志记录方法以不执行任何操作:

class LoggerStub
  
  [:debug, :error, :fatal, :info, :warn].each do |method|
    class_eval <<-CODE
      def #{method}(message); nil; end
    CODE
  end
  
end
发生的情况是loggable gem定义了一个称为logger的类变量和实例变量,而.info等方法是在其中一个变量上调用的。这些方法只返回nil。
我知道这是一个部分答案(因为它不是完整的解决方案),但这应该是让您开始找到正确解决方案的好信息。
还要查看这些文件:
  1. log_methods.rb
  2. logger_stub.rb

更新:
添加..
class ActionController::Base
    self.class.logger = Rails.logger
end

强制覆盖 loggable 对 logger 的赋值,这样就可以正常工作了。我想对于 class ActiveRecord::Base 也是同样的解决方案。

但当然,这是一种暴力解决方案,没有修复潜在问题。要进行真正的“修复”,您需要深入研究 fleakr 或 loggable,并可能在这些 gem 的问题页面上提出此问题。

更新

看看是否可以让 fleakr gem 使用来自 mediashelf 的 loggable 分支:该分支应该使用默认的 Rails 日志记录器(如果它可用)。


在我看来,他应该将宝石分为:开发和测试环境。 - Matt
1
Fleaker确实是罪犯。谢谢! - Kyle Decot
这不是我的问题,但它引导我找到了解决方案。对我来说,问题出在Heroku建议使用的rails_12factor gem上。我没有将其设置为生产组,并且其中包含某种标准输出日志记录gem。谢谢! - mraaroncruz

0

如果你调用了 :GET "/images/92131721fcf3b8beb12b6e55014b9976/41_m.png",那么这不会跳转到 images 控制器的 :index 动作,而是 :show 动作吗?

(当然,如果不知道你的路由文件,我无法确定。)


它实际上会进入一个名为“server action”的操作,这是我设置用于调整大小和显示不同图像的操作。 - Kyle Decot
1
感谢您的投票,尽管它确实帮助纠正了问题}:-| - Pavling
我认为,任何让你更接近解决实际问题的事情(通过让你的问题更清晰明了),即使它不是一个已完成的确定答案,也比没有用处。 - Pavling
1
@kyle,你不应该因为答案没有解决问题就给它投反对票...没有人能保证他们的答案一定能解决问题...在这种情况下,@pavling只是猜测你的问题,因为你在问题中没有提供任何信息。 - rubyprince
1
不用谢。虽然你的回答帮助澄清了问题,但我认为它作为评论会更好。 - Zabba
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接