相关疑难解决方法(0)

重定向Rails 4中特定控制器的记录器输出

我已经根据我之前的问题中的答案构建了一个解决方案.Rails 3 for Rails 3中的特定控制器的重定向记录器输出.它工作得很好但是现在我尝试将相同的基于中间件的解决方案应用于Rails 4项目但是那里是一些差异保持相同的解决方案工作.

Rails 3解决方案:

module MyApp
  class LoggerMiddleware

    REPORTS_API_CONTROLLER_PATH = %r|\A/api/v.*/reports.*|
    REPORTS_API_CONTROLLER_LOGFILE = "reports_controller.log"

    def initialize(app)
      @app = app
      @logger = Rails::logger
           .instance_variable_get(:@logger)
           .instance_variable_get(:@log)
      @reports_api_controller_logger = Logger.new(
           Rails.root.join('log', REPORTS_API_CONTROLLER_LOGFILE), 
           10, 1000000)
    end

    def call(env)
      Rails::logger
           .instance_variable_get(:@logger)
           .instance_variable_set(:@log,
               case env['PATH_INFO']
               when REPORTS_API_CONTROLLER_PATH then
                 @reports_api_controller_logger
               else
                 @logger
               end
           )
      @app.call(env)
    end
  end
end

Rails.application.middleware.insert_before Rails::Rack::Logger, MyApp::LoggerMiddleware
Run Code Online (Sandbox Code Playgroud)

在上面:

Rails.getger = Rails 3 getterRails::logger.instance_variable_get(:@logger).instance_variable_get(:@log)

用于Rails.logger的Rails 3 setter(设置为@my_logger)=Rails::logger.instance_variable_get(:@logger).instance_variable_set(:@log,@my_logger)

我立即注意到的一件事是,在Rails 4中,上面的Rails::logger.instance_variable_get(:@logger).instance_variable_get(:@log)回报为零.

检查Rails 4控制台,我确实看到了Rails.instance_variable_get(:@logger) …

logging rack ruby-on-rails ruby-on-rails-4

16
推荐指数
2
解决办法
941
查看次数

Ruby中的$$是什么意思?

irb(main):002:0> $$
=> 5052
Run Code Online (Sandbox Code Playgroud)

$$Ruby中的含义是什么?如何/在何处使用它?

ruby

13
推荐指数
3
解决办法
2165
查看次数

如何将Rails错误记录到单独的日志文件中?

我们的生产日志很长,包含的不仅仅是错误.我想要一个只有错误/异常的第二个日志文件.

这可能吗?

我们正在使用rails 2.x.

谢谢.

logging ruby-on-rails

13
推荐指数
2
解决办法
8145
查看次数

标签 统计

logging ×2

ruby-on-rails ×2

rack ×1

ruby ×1

ruby-on-rails-4 ×1