Ich verwende Rails 'ActiveJob, und einer meiner Jobs nimmt eine rohe E-Mail als Eingabe. Beim Debuggen kann dies zu einer großen Menge an Rauschen in meinem Anwendungsprotokoll führen. Wie kann ich das vermeiden?
%Vor% Es scheint, als wäre die einzige Möglichkeit, ActiveJobs interne Protokollierungsmethode
Platziere es irgendwo in app/initializers/active_job_logger_patch.rb
.
Ich habe after_initialize
vorher angehakt. Es stellte sich heraus, dass es nur in perform_start
method, aber nicht in enqueue
funktioniert.
Die Verwendung von on_load
Methode zum Hook funktioniert. Ich denke, es ist die Lazyload-Funktion in Rails, die bewirkt, dass die Klasse nach der Überschreibung geladen wird.
Eine Sache, die hier zu beachten ist: In jeder Instanz einer Klasse, die von (Rails 5.1) abgeleitet ist ActiveJob :: Base (oder jede Klasseninstanz, die von einer untergeordneten Klasse aufgerufen wird) ActiveJob :: Base) Die normalen Rails.logger.info('log this')
-Befehle werden auf der Rails-Konsole geloggt (vermutlich via STDOUT).
Ich habe den Mechanismus, der dieses Hijacking von Rails.logger verursacht, nicht ganz herausgefunden, aber Sie können zu ActiveJob :: Base.logger wechseln und das Wissen dafür verwenden: ( Ссылка ) um das Verhalten wie gewünscht zu ändern.
So können Sie sich wie gewünscht anmelden:
1) Fügen Sie require "active_job/logging"
in Ihre Anwendung ein.rb
2) Fügen Sie in config / development.rb (oder in die von Ihnen gewünschten Umgebungen) folgende Zeile ein:
%Vor%3) Jede Anmeldung in Unterklassen von ActiveJob, verwenden Sie diese für die Protokollierung:
%Vor% Wenn jemand auf den Code hinweisen kann, der erklärt, warum sich Rails.logger.info
in einer ActiveJob -Klasse anders verhält, wäre das eine gute Lektüre.
Tags und Links ruby-on-rails activesupport rails-activejob