2015-08-17 18 views
8

Sto usando ActiveJob di Rails e uno dei miei lavori prende un email non elaborato come input. Durante il debug, questo può causare una quantità enorme di rumore nel registro delle applicazioni. Come posso evitarlo?Come faccio a filtrare o rimuovere la registrazione degli argomenti di ActiveJob?

[ActiveJob] Enqueued EmailParserJob (Job ID: 9678f343-c876-4f9f-9cc7-db440634e178) to DelayedJob(default) with arguments: "NOISE" 
+0

Qualcuno delle risposte fornite ha funzionato per te? – Marklar

+0

no, ho finito con l'abbandonare ActiveJob e mi sono limitato a Delayed :: Job. –

risposta

4

Sembra che l'unico modo è quello di ignorare di internal logging method ActiveJob:

class ActiveJob::Logging::LogSubscriber 
    private def args_info(job) 
    '' 
    end 
end 

metterlo da qualche parte in app/initializers/active_job_logger_patch.rb.

+1

Questo ha funzionato per me, ma ho dovuto aggiungere questo al mio inizializzatore in Rails 5.0.2: 'require 'active_job/logging'' – rbhitchcock

2

Ho usato after_initialize per agganciarlo in anticipo. Si è scoperto che funziona solo nel metodo perform_start ma non in enqueue.
Utilizzare il metodo on_load per agganciare. Penso che sia la funzione lazyload in Rails che causa il caricamento della classe dopo l'override.

ActiveSupport.on_load :active_job do 
    class ActiveJob::Logging::LogSubscriber 
    private def args_info(job) 
     # override this method to filter arguments shown in app log 
    end 
    end 
end 
0

Una cosa che può essere utile da notare qui: In qualsiasi istanza di una classe che è una sottoclasse di (Rails 5.1) ActiveJob :: Base (o, qualsiasi istanza di classe chiamata da una classe sottoclassificata da ActiveJob :: Base) I normali comandi Rails.logger.info('log this') verranno registrati nella console di rotaie (presumibilmente tramite STDOUT).

Non ho ancora capito il meccanismo che causa questo dirottamento di Rails.logger, ma puoi passare ad ActiveJob :: Base.logger e usare la conoscenza di questo: (https://github.com/rails/rails/blob/b205ea2dc6c70b2b8e2134640e3056ed33fdc6be/activejob/lib/active_job/logging.rb#L13) per cambiare il comportamento come desideri .

Quindi, questo consente di registrare come si vuole:

1) Inserisci require "active_job/logging" nel application.rb

2) In config/development.rb (o qualunque ambiente che si desidera) comprendono questa linea:

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

3) Qualsiasi registrazione all'interno di sottoclassi di ActiveJob, di utilizzare per la registrazione:

ActiveJob::Base.logger.info('(MyJob) Inside of a job but not going to STDOUT') 

Se qualcuno può indicare il codice che spiega perché Rails.logger.info si comporta diversamente quando all'interno di una classe ActiveJob sarebbe una buona lettura.