Ich arbeite auf Schienen Projekt und ich versuche, Ausnahmen zu erhalten, um in den Schienen Protokolldateien protokolliert werden. Ich weiß, dass ich logger.error $!
aufrufen kann, um die erste Zeile der in der Datei protokollierten Ausnahme zu erhalten. Aber ich möchte auch den gesamten Trace-Stack protokollieren lassen. Wie protokolliere ich die gesamte Rückverfolgung einer Ausnahme mit dem Standard-Rails-Logger?Wie protokolliere ich die gesamte Rückverfolgung einer Ruby-Ausnahme mit dem Standard-Rails-Logger?
Wie protokolliere ich die gesamte Rückverfolgung einer Ruby-Ausnahme mit dem Standard-Rails-Logger?
Antwort
logger.error $!.backtrace
Auch vergessen Sie nicht, dass Sie
rescue ErrorType => error_name
$!
Ihre Fehler einen Variablennamen andere als die Standard zu geben.
logger.error caller.join("\n")
sollte den Trick tun.
Die Art und Weise Schienen tut es
137 logger.fatal(
138 "\n\n#{exception.class} (#{exception.message}):\n " +
139 clean_backtrace(exception).join("\n ") +
140 "\n\n"
141 )
248 def clean_backtrace(exception)
249 if backtrace = exception.backtrace
250 if defined?(RAILS_ROOT)
251 backtrace.map { |line| line.sub RAILS_ROOT, '' }
252 else
253 backtrace
254 end
255 end
256 end
In Rails, ActionController::Rescue
behandelt ist. In meiner Anwendung Controller-Aktionen, verwende ich Methode log_error
von diesem Modul zu recht-Format Backtrace in Protokollen:
def foo_action
# break something in here
rescue
log_error($!)
# call firemen
end
log_error funktioniert nicht mehr in Rails 3 – Priit
Hier ist, wie ich es tun würde:
Hier ist die ri Dokumentation # Backtrace für Ausnahme:
Beachten Sie, dass Sie COUL d benutze auch den Kernel # Aufrufer, der dir die volle Spur (minus dem aktuellen Rahmen) gibt.
Auch - Beachten Sie, wenn Sie alle Ausnahmen zu fangen versuchen, Sie von Exception retten sollte, nicht Runtime.
In späteren Versionen von Rails, Kommentar- einfach die folgende Zeile in RAIL_ROOT/config/initializers/backtrace_silencers.rb (oder fügen Sie diese Datei selbst wenn er nicht da ist):
# Rails.backtrace_cleaner.remove_silencers!
diese Weise können Sie die volle bekommen Backtrace in das Protokoll einer Ausnahme geschrieben. Dies funktioniert für mich in v2.3.4.
Scheint nicht in 2.3.9 zu funktionieren –
Es ist Teil der Dokumentation für Rails 3.2.3. Siehe hier: http://api.rubyonrails.org/classes/ActiveSupport/BacktraceCleaner.html – Rob
- 1. Wie protokolliere ich Zellen, die mit NSIndexPath ausgewählt wurden?
- 2. Soll ich meine Rückverfolgung zerstören?
- 3. Wie protokolliere ich eine Ausnahme in einer Datei?
- 4. Wie protokolliere ich eindeutige Autoren in git?
- 5. Rückverfolgung seltenen Fehler
- 6. Probleme mit der Rückverfolgung Pfad
- 7. Fehler ohne Rückverfolgung auslösen
- 8. Wie protokolliere ich SQL-Anweisungen in DropWizard
- 9. Wie protokolliere ich die Anzahl der Instanzen eines Typs?
- 10. Wie protokolliere ich einen langen langen Wert mit NSLog?
- 11. Wie lese ich die gesamte Befehlszeile?
- 12. Wie protokolliere ich die aktive Konfiguration in einer Spring Boot-Anwendung?
- 13. JMeter - Wie protokolliere ich die vollständige Anfrage nach einer fehlgeschlagenen Antwort?
- 14. Levenshtein Entfernung mit Rückverfolgung in PHP
- 15. Wie kann ich eine Rückverfolgung in Perl erhalten?
- 16. Wie protokolliere ich Antworten auf Nachrichten in WebSphere MQ?
- 17. Wie protokolliere ich die RestTemplate Anfrage und Antwort mit der Feder?
- 18. Wie protokolliere ich Daten konsistent von meinen seriellen Ports?
- 19. Wie protokolliert man die gesamte StackTrace einer Anwendung in .NET
- 20. Screen Recorder für die Rückverfolgung Ihrer Schritte während des Debuggens?
- 21. Wie protokolliere ich nicht erfasste Ausnahmen in PHP?
- 22. Wie protokolliere ich meine Selenium-Aktionen in example.metadata [: extra_failure_lines]?
- 23. Wie protokolliere ich die Häufigkeit und die zuletzt verwendete Zeit für eine gespeicherte Prozedur?
- 24. Rückverfolgung von Spalten in errechneten Takten
- 25. Wie die gesamte va_list-Eingabe abgerufen wird
- 26. MySQL - Wie führe ich die gesamte Spalte aus?
- 27. Wie kann ich beim Einfügen in KendoUI Editor die gesamte HTML-Formatierung aus dem Text entfernen?
- 28. Wie kann ich dem Benutzer ermöglichen, die gesamte Anwendung von der Client-Seite herunterzuladen?
- 29. Wie protokolliere ich eine Nachricht, wenn die jshint-Aufgabe ausgeführt wird und alles korrekt ist?
- 30. MSDOS druckt die gesamte Batch-Datei auf dem Bildschirm statt
Fehle ich etwas? logger.error nimmt nur ein einziges Argument, so dass der Code nicht funktioniert ... –
Dieser funktioniert nicht, benutze 'logger.error e.message + "\ n" + e.backtrace.join ("\ n") 'stattdessen. –
Ich könnte schwören, die verschiedenen Parameter vor 4 Jahren gearbeitet, aber vielleicht hat es nicht. Ich habe es aktualisiert, um nur das Backtrace zu protokollieren, was der relevanteste Aspekt der Frage zu sein scheint. Ich vertraue darauf, dass der Leser herausfinden kann, dass mehrere Logger-Aufrufe möglich sind, dito für die String-Verkettung (oder mehr Ruby-y, Interpolation). –