【问题标题】:Separated logs in Rails 6Rails 6中的分离日志
【发布时间】:2021-06-06 22:53:29
【问题描述】:

很久以前,可以为 Rails 中的每个类或类层次结构设置不同的日志文件,只是这样做

类 ApplicationJob

在每个后代类中都相同

现在,使用 rails 6 和 Spring 运行,我发现最后定义的日志覆盖了之前的日志。还有其他食谱吗?

我还注意到覆盖中有一些系统性。例如,也许 ActiveJob 的所有后代都得到了错误的日志文件,但 ActiveRecord 的后代得到了不同的记录器。

如果我为每个模型、控制器和作业执行 self.logger=Logger.new('nameOfClass.log') 会发生什么,有什么线索吗?

编辑:我在类定义中尝试了self.logger=,在类定义之后尝试了MyClass.logger=。都不行。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-6


    【解决方案1】:

    任何关于如果我这样做会发生什么的线索 self.logger=Logger.new('nameOfClass.log') 用于每个模型、控制器 和工作?

    不知道模型,但我在每个控制器和作业中声明 logger = Logger.('class_name.log') 结果可以检查 controller_a.log 或 controller_b.log / job_a.log 或 job_b.log分别

    更新:

    例如(控制器)

    # a_controller
    def AController < ApplicationController
      before_action :clogger
      def index
        @logger.info("index")
        ...
      end
    
      def show
        @logger.info("show")
        ...
      end
    
      private
        
        def clogger
          @logger = Logger.new('path_to_log/a_controller.log')
        end
    end
    
    # b_controller
    def BController < ApplicationController
      before_action :clogger
      def index
        @logger.info("index")
        ...
      end
    
      def show
        @logger.info("show")
        ...
      end
    
      private
        
        def clogger
          @logger = Logger.new('path_to_log/b_controller.log')
        end
    end
    

    而且我分别得到了 a 和 b 控制器的日志。它与工作相同。

    【讨论】:

    • 你最近检查过这个吗?我用的是self.logger而不是直接logger,不一样吗?如果是,那么对于 6.0,它不再起作用了。我在 job_b.log 中激活了 job_a
    • 是、但在 api_only 模式下。 logger = Logger.new('log/fun_slack.log') 用于助手 logger = Logger.new('log/a_controller.log') 用于控制器 logger = Logger.new('log/b_controller.log') 用于另一个控制器等。但我还没有尝试过 self.logger。
    • @arivero 更新了它。我希望它会有所帮助。
    • 真有趣。实例变量而不是类变量。我没有考虑过。
    • 我想这不是没用的。总帐。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多