2016-04-05 6 views
1

Meine Rails4 Anwendung läuft mit Docker. Es führt eine Rake-Task zum Abrufen von Nachrichten von AWS SQS aus.Log-Problem in Rails4 mit Docker laufenden Rake Aufgabe

Das Problem, das ich traf, ist, dass Protokolle nicht in einer Konsole in der Zeit angezeigt werden können. Die Konsole zeigt nichts bis Ausnahme/Fehler kommt. Mit anderen Worten, wenn meine Anwendung funktioniert, kommen keine Protokolle zur Konsole. Aber wenn die Anwendung schief gelaufen ist, kommen alle Protokolle (Info, Warnung und Fehler) zusammen!

ich konfigurieren bereits die config/production.rb als Schlag:

config.logger = Logger.new(STDOUT) 
config.logger.level = Logger.const_get('INFO') 
config.log_level = :info 

ich google 'log Rake Aufgabe nicht funktionierte', aber nichts brauchbares. Ist dies ein Rails-Log-Problem oder ein Rake-Task-Log-Problem oder vielleicht ein Docker-Problem?

In der Hoffnung, dass Sie einen Rat bekommen!

+0

ich ein ähnliches Problem zu sehen, wo jeder Rake-Aufgabe, die ich nicht auf stdout ausgegeben aufrufen, bis die Rake Aufgabe verlassen hat. Ich habe dies mit dem folgenden Code in einer Rake-Task getestet: 'loop {puts" in loop "; Schlaf 2} '. Während die Task ausgeführt wird, wird in STDOUT nichts angezeigt. Wenn sie jedoch abgeschlossen ist, werden beide Instanzen von "in loop" sofort ausgegeben. Ich habe nicht gefunden, warum das ist, aber ich werde hier zurück posten, wenn ich es herausfinden werde. – alexpls

Antwort

0

für Rails 4.x die Protokollebene Konfiguration

# Enable stdout logger 
config.logger = Logger.new(STDOUT) 

# Set log level 
config.log_level = :ERROR 

Der Logger Pegel wird auf der Logger-Instanz aus config.log_level eingestellt auf: (https://github.com/rails/rails/blob/v4.2.4/railties/lib/rails/application/bootstrap.rb#L70)

+0

Danke, Mann! Aber ich glaube nicht, dass das mein Problem lösen würde. Die Protokolle, einschließlich Info, Warnung und Fehler, wurden nicht rechtzeitig angezeigt. Sie kommen nur zur Konsole, wenn eine Ausnahme auftritt. –

+0

** ENV Konfiguration ** # default: ERROR config.log_level = ENV.fetch ("LOG_LEVEL", "ERROR") ** Run Test von Shell ** # Log-Ebene: INFO (die Wert ist in bootstrap.rb hoch) $ LOG_LEVEL = info Rake Test # Protokolllevel: ERROR $ LOG_LEVEL = debug Rake Test – JohnPaul

3

Versuchen Ausgabepufferung zu STDOUT Deaktivierung . Sie können dies tun, indem Sie folgende Zeile zu Rake Aufgabe hinzufügen:

$stdout.sync = true