Wenn ich in einer Rechenaufgabe den Befehl put verwende, wird die Ausgabe auf der Konsole angezeigt. Diese Meldung wird jedoch nicht in der Protokolldatei angezeigt, wenn die App in der Produktion bereitgestellt wird.
Wenn ich jedoch Rails.logger.info sage, sehe ich im Entwicklungsmodus nichts auf der Konsole. Ich muss zur Protokolldatei gehen und das verfolgen.
Ich möchte idealerweise Rails.logger.info verwenden und im Entwicklungsmodus innerhalb der Rake-Task sollte die Ausgabe von Logger auch an die Konsole gesendet werden.
Gibt es einen Weg, dies zu erreichen?
quelle
Rails.logger = Logger.new(STDOUT)
in development.rb zu setzen?config.logger = Logger.new(STDOUT)
Sie können eine neue Rechenaufgabe erstellen, damit dies funktioniert.
Auf diese Weise können Sie beim Ausführen Ihrer Rake-Task zuerst to_stdout hinzufügen, um stdout-Protokollnachrichten abzurufen, oder es nicht einschließen, damit Nachrichten an die Standardprotokolldatei gesendet werden
quelle
Rake-Tasks werden von einem Benutzer über eine Befehlszeile ausgeführt. Alles, was sie sofort wissen müssen ("5 Zeilen verarbeitet"), sollte auf dem Terminal mit ausgegeben werden
puts
.Alles, was für die Nachwelt aufbewahrt werden muss ("Warn-E-Mail an [email protected] gesendet"), sollte an die gesendet werden
Rails.logger
.quelle
Ich würde sagen, dass die Verwendung
Rails.logger.info
der richtige Weg ist.Sie können es nicht in der Serverkonsole sehen, da es nicht über den Server ausgeführt wird. Öffnen Sie einfach eine neue Konsole und
tail -f
die Protokolldatei, es wird den Trick tun.( via )
quelle
tailf
"Es ist ähnlich wie tail -f, greift aber nicht auf die Datei zu, wenn sie nicht wächst" (von der Manpage). Es ist auch kürzerCode
Für Rails 4 und höher können Sie Logger Broadcast verwenden .
Wenn Sie sowohl STDOUT als auch Dateiprotokollierung für Rake-Aufgaben im Entwicklungsmodus erhalten möchten, können Sie diesen Code hinzufügen in
config/environments/development.rb
:Prüfung
Hier ist eine kleine Rake-Aufgabe, um den obigen Code zu testen:
Laufende
rake stdout_and_log:test
Ausgabenwährend
wurde hinzugefügt
log/development.log
.Laufende
rake stdout_and_log:test RAILS_ENV=production
Ausgabenwährend
wurde hinzugefügt
log/production.log
.quelle
basename($0) == 'rake'
funktioniert der Trick nicht mehr, da derrails
Befehl selbst ausgeführt wirdrake
. Ich würde gerne einen guten Ersatz dafür finden, abhängig von einer Aufgabe, die das einrichtetbroadcast
. (Zumindest dieser Teil funktioniert immer noch gut.)Rakefile
an der Wurzel Ihres Projekts hinzufügenWie wäre es mit einem Anwendungshelfer, der erkennt, welche Umgebung ausgeführt wird und das Richtige tut?
Rufen Sie dann output_debug anstelle von put oder logger.info auf
quelle
In Rails 2.X, um den Logger in Modellen auf STDOUT umzuleiten:
So leiten Sie den Logger in Controllern um:
quelle
Führen Sie einen Hintergrundjob mit '&' aus und öffnen Sie das Skript / die Konsole oder was auch immer. Auf diese Weise können Sie mehrere Befehle im selben Fenster ausführen.
Hinweis Kann schnell schlampig werden, wenn viel Protokoll ausgegeben wird.
quelle