如何筛选或删除ActiveJob参数的日志记录?

Jep*_*erg 11 ruby-on-rails activesupport rails-activejob

我正在使用Rails的ActiveJob,我的一个工作是将原始电子邮件作为输入.调试时,这可能会导致应用程序日志中出现大量噪音.我怎么能避免这种情况?

[ActiveJob] Enqueued EmailParserJob (Job ID: 9678f343-c876-4f9f-9cc7-db440634e178) to DelayedJob(default) with arguments: "NOISE"
Run Code Online (Sandbox Code Playgroud)

Dav*_*ins 6

这里需要注意的一件事可能有用:在从 (Rails 5.1) ActiveJob::Base 子类化的类的任何实例中(或者由从 ActiveJob::Base 子类化的类调用的任何类实例),正常Rails.logger.info('log this')命令将进行登录到 Rails 控制台(大概通过 STDOUT)。

我还没有完全弄清楚导致 Rails.logger 劫持的机制,但您可以切换到 ActiveJob::Base.logger 并使用这方面的知识:( https://github.com/rails/rails/blob /b205ea2dc6c70b2b8e2134640e3056ed33fdc6be/activejob/lib/active_job/logging.rb#L13)以根据需要更改行为。

因此,这允许您根据需要进行记录:

1)包含require "active_job/logging"在您的application.rb中

2)在config/development.rb(或任何你想要的环境)中包含这一行:

config.active_job.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new("log/#{Rails.env}.log"))
Run Code Online (Sandbox Code Playgroud)

3) ActiveJob 子类内部的任何日志记录,请使用它进行日志记录:

ActiveJob::Base.logger.info('(MyJob) Inside of a job but not going to STDOUT')
Run Code Online (Sandbox Code Playgroud)

如果有人能指出代码来解释为什么在ActiveJobRails.logger.info类内部时表现不同,那么这将是一些很好的阅读。


Eug*_*Zol 5

似乎唯一的方法是覆盖 ActiveJob 的内部日志记录方法

class ActiveJob::Logging::LogSubscriber
  private def args_info(job)
    ''
  end
end
Run Code Online (Sandbox Code Playgroud)

把它放在某个地方app/initializers/active_job_logger_patch.rb


Gom*_*thi 4

log_arguments从 Rails 6.1 开始,您可以像下面这样关闭日志记录。这将关闭记录从 派生的所有作业的参数ApplicationJob,您也可以基于每个作业进行设置。

class ApplicationJob < ActiveJob::Base
  self.log_arguments = false
end
Run Code Online (Sandbox Code Playgroud)

参考:

https://github.com/rails/rails/pull/37660