Log-Level in Produktion ändern?

Hallo!\n\nIch versuche gerade, einige langsame Abfragen zu debuggen, die nur in Umgebungen auftreten, die im Produktionsmodus ausgeführt werden. Mir ist aufgefallen, dass die Protokollierungsstufe im Produktionsmodus fest codiert ist (Code-Referenz) und keine Möglichkeit besteht, sie direkt zu konfigurieren. Ich möchte diese Protokollierungsstufe auf Debug ändern (zumindest vorübergehend), um mehr Informationen zu erhalten. Gibt es eine Möglichkeit, dies zu erreichen?\n\nIch habe einige ziemlich hacky Workarounds ausprobiert, bei denen die Protokollierungsstufe zur Laufzeit mit der Rails-Konsole geändert wurde, aber keiner der Hacks führte dazu, dass DB-Abfragen in den Debug-Protokollen angezeigt wurden (wenn ich manuell Debug-Protokolle mit Rails.logger.debug in der Rails-Konsole erstellte, wurden diese nach den Hacks angezeigt).\n\nDanke!\n\nP.S. Nur um mögliche Bedenken bezüglich meiner obigen Anmerkung zu Problemen, die nur in Produktionsumgebungen auftreten, zu zerstreuen: Ich verwende Discourse auf eine ziemlich nicht standardmäßige Weise, die eine große Anzahl von Kategorien beinhaltet. Die Probleme, mit denen ich konfrontiert bin, werden wahrscheinlich von keiner anderen Discourse-Instanz erlebt. :slight_smile:

3 „Gefällt mir“

Das hat mich in letzter Zeit verwirrt.

image

Ich habe bestätigt, dass ich den Log-Level „info“ habe, aber keine Menge von:

Rails.logger.info "blah blah blah"

erscheint und /errors bleibt hartnäckig auf „warn“ – was übersehe ich?

Hat jemand eine Lösung dafür?

Es ist sehr frustrierend

image

… und doch sehe ich keine Protokolle auf Info-Ebene in /logs!

Das Umschalten von “info” tut nichts:

Ich bin mir nicht sicher, wie wir bestimmte Arten von Problemen, die nur in der Produktion auftreten, ohne diese diagnostizieren sollen … :sweat_smile:

Was blockiert Protokolle auf Info-Ebene?

Mehr Dinge, die ich versucht habe:

  • Ich habe production.log überprüft und die Info-Logs, die ich möchte, sind da!
  • Ich habe mir die Ausgabe von Logster.config in der Rails-Konsole angesehen, und sie ist nicht offensichtlich nützlich.
  • dito /vendor/bundle/ruby/3.2.0/gems/logster-2.19.1/lib/logster/configuration.rb

Ich bin also immer noch ratlos, warum die Info-Level-Logs nicht in /logs angezeigt werden.

Offensichtlich filtert etwas die Info-Level-Logs zwischen production.log und Logster heraus.

2 „Gefällt mir“

Wenn ich die Dinge richtig verstehe, unterdrückt es Info- und Debug-Meldungen im Produktionsmodus per Design. Blaming logster/lib/logster/rails/railtie.rb at main · discourse/logster · GitHub

store.level = Logger::Severity::WARN if Rails.env.production?

Aus einem Blogbeitrag

Im Produktionsmodus aggregiert es ähnliche Fehler durch Fingerprinting von Backtraces und lauscht auf Warnungen/Fehler und Fatale Meldungen. Die Absicht ist, eine Liste offener Anwendungsprobleme anzuzeigen, die irgendwie gelöst werden können.

Im Entwicklungsmodus liefert es einen vollen Strom aller von Rails produzierten Protokolle (Debug und höher). Dies hat erhebliche Vorteile gegenüber der Konsole, da Sie richtigen Zugriff auf Backtraces für jede Protokollzeile haben.

2 „Gefällt mir“

Danke.

Das ergibt Sinn für den Mainstream-Fall.

Das erscheint jedoch unzumutbar einschränkend und sollte für besondere Umstände konfigurierbar sein?

Dies schließt die Zeiten ein, in denen Sie in der Produktion von Ausnahmefällen betroffen sind, die Sie untersuchen möchten.

1 „Gefällt mir“