2016-03-29 4 views
1

Ich bin gerade in einem Projekt in Schiene gelandet, die Capistrano für die Bereitstellung und sidekiq für asynchrone Aufgaben verwendet. Ich verstehe, dass capistrano /current/log/production.log verwendet, um die Rails-App zu protokollieren.Entfernen Sie ActiveJob-Zeilen aus production.log und teilen Sie es in error.log und std.log

Ich es geschafft, den Log-Level auf Warnstufe zu ändern, aber ich habe immer noch Info-Zeilen für was ich glaube, Sidekiq Logs mit ActiveJob-Tag zu sein. Wie kann ich den Logger kontrollieren?

Auch ich möchte mehr Kontrolle haben, um den Logger zu haben, Info + in eine Datei und Warnung + in andere Datei zu schreiben. Ich dort einen Standard Weg, dies zu tun?

Antwort

2

ActiveJob teilt wie ActiveRecord einen Protokollierer aus der Basisklasse - z. B. ActiveRecord :: Base.logger. Es ist ein Accessor, an die Sie Ihren eigenen Logger zuweisen, so halte ich würde einen Initialisierer (config/initializers/loggers.rb) mit so etwas wie dies zu schaffen:

log_path = File.join(File.dirname(__FILE__), '..', '..', 'log', "activejob_#{Rails.env}.log") 
ActiveJob::Base.logger = Logger.new(log_path) 

Wenn die Nachrichten aus Sidekiq als ActiveJob kommen (ganz wahrscheinlich) ersetzen Sie dann ActiveJob :: Base.logger durch Sidekiq :: Logging.logger

+0

Vielen Dank für die Antwort. Deine Vermutung hat mein Problem nicht gelöst, aber half mir den ActiveJob als Logger zu verwerfen. Das Problem war, dass Sidekiq selbst die Logs schrieb. Ich habe immer noch keine Möglichkeit gefunden, den Loglevel vom capistrano zum sidekiq zu steuern, aber es gelingt mir, den sidekiq in einer anderen Datei zu loggen. Das löst das Problem vorerst. – joaonrb

+0

Schauen Sie sich die sidekiq Protokollinformationen hier an: https://github.com/mperham/sidekiq/wiki/Logging – AndyV

Verwandte Themen