我按照Ruby Screencast指南从Rails 3.2升级到Rails 4.我的测试正在运行并且服务器启动,但是当我发送请求时收到错误:
ERROR NoMethodError: undefined method `tagged' for #<Formatter:0x000000057f5dc8>
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/activesupport-4.0.0/lib/active_support/tagged_logging.rb:67:in `tagged'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/railties-4.0.0/lib/rails/rack/logger.rb:21:in `call'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/quiet_assets-1.0.2/lib/quiet_assets.rb:18:in `call_with_quiet_assets'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/actionpack-4.0.0/lib/action_dispatch/middleware/request_id.rb:21:in `call'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/rack-1.5.2/lib/rack/methodoverride.rb:21:in `call'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/rack-1.5.2/lib/rack/runtime.rb:17:in `call'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/activesupport-4.0.0/lib/active_support/cache/strategy/local_cache.rb:83:in `call'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/actionpack-4.0.0/lib/action_dispatch/middleware/static.rb:64:in `call'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/railties-4.0.0/lib/rails/engine.rb:511:in `call'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/railties-4.0.0/lib/rails/application.rb:97:in `call'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/rack-1.5.2/lib/rack/lock.rb:17:in `call'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/rack-1.5.2/lib/rack/handler/webrick.rb:60:in `service'
/home/mahoni/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service'
/home/mahoni/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
/home/mahoni/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread'
Run Code Online (Sandbox Code Playgroud)
我已经查看了代码,对我来说没有意义.它叫logger.tagged.变量后面的对象logger不是记录器,而是Formatter对象.这很奇怪.
知道是什么原因引起的吗?到目前为止我:
Gemfile.lockgem update railsbundle installbundle update在这个和不同的订单.我怎么处理这个?
我为 Rails 编写了一个自定义格式化程序:
\n\nmodule Logging\n class GeneralFormatter < Logger::Formatter\n def call(severity, time, program_name, message)\n ...\n end\n end\nend\nRun Code Online (Sandbox Code Playgroud)\n\n\n\nconfig.log_formatter = Logging::GeneralFormatter.new
不幸的是,这似乎不起作用\xe2\x80\x94我的自定义格式没有启动。但是,如果我也定义它:
\n\nmodule Logging\n class GeneralLogger < ActiveSupport::Logger\n def initialize(*args)\n super(*args)\n @formatter = GeneralFormatter.new\n end\n end\nend\nRun Code Online (Sandbox Code Playgroud)\n\n然后我就可以按照config.logger = Logging::GeneralLogger.new需要格式化我的日志了。
我的设置做错了什么log_formatter?当我想要的只是自定义格式时,我宁愿不定义自己的记录器。
编辑(回应评论,并通过更多的挖掘添加更多细节):
\n\n我正在设置config.log_formatter并在开发中进行测试,并且它似乎在一定程度上application.rb起作用,因为该调用为我提供了我的自定义类。但这是我在打电话时看到的行为:Rails.logger.formatterRails.logger.warn("test")
test被打印到控制台(后跟换行符)。call输入我的格式化程序的方法。call …