42 Stimmen

Geländer: Logging für Code im lib-Verzeichnis?

Wie lässt sich die Protokollierung für Code im lib-Verzeichnis am besten/einfachsten konfigurieren?

40voto

Stéphan Kochen Punkte 18962

Es gibt zwei Möglichkeiten, dies zu tun:

  • Vorausgesetzt, Ihre Bibliothek ist in sich geschlossen und hat ein Modul, können Sie eine logger Attribut zu Ihrem Modul hinzufügen und dieses überall in Ihrem Bibliothekscode verwenden.

    module MyLibrary
      mattr_accessor :logger
    end

    Sie verwenden dann entweder einen Initialisierer in config/initializers/ oder ein config.after_initialize Block in config/environment.rb um Ihren Logger zu initialisieren, etwa so:

    require 'mylibrary'
    MyLibrary.logger = Rails.logger

    Dies würde es Ihnen immer noch ermöglichen, Ihre in sich geschlossene Bibliothek von Skripten außerhalb von Rails zu verwenden. Was gelegentlich ganz nett ist.

  • Wenn es wirklich keinen Sinn macht, Ihre Bibliothek ohne Rails zu benutzen, dann können Sie auch einfach Rails.logger direkt.

In jedem Fall haben Sie es mit einem Standard-Ruby-Logger zu tun. Denken Sie auch daran, dass der Logger theoretisch in der Lage ist nil .

3 Stimmen

NB: Diese Antwort enthält falsche Informationen, und die Redakteure wollen nicht, dass ich sie korrigiere. Sofern Sie nicht (vielleicht) Rails älter als 2.0 verwenden, haben Sie es NICHT mit einem "Standard-Ruby-Logger" zu tun. Rails verwendet jetzt ActiveSupport::BufferedLogger . Wenn Sie sich entscheiden, einen separaten Logger für (z.B.) einen Cron-Job zu instanziieren, der in einem Rails-Projekt enthalten ist, um das Standard-Rails-Protokoll nicht zu "verschmutzen". In diesem Fall, stellen Sie sicher, dass Sie ActiveSupport::BufferedLogger.new und nicht nur Logger.new . Das habe ich versucht und es hat nicht funktioniert.

21voto

Nadeem Yasin Punkte 4403

Wir können den Rails-Logger direkt in der Lib verwenden, siehe das folgende Snippet.

require 'logger'

Rails.logger.info "Hay..!!! Im in lib"
Rails.logger.debug "Debugging this object from Lib #{object.inspect}"
Rails.logger.error "This is an error..."

4 Stimmen

Das funktionierte bei mir schließlich, nachdem ich erkannt hatte, dass ich <require 'logger'> brauchte. Es ist völlig offensichtlich, wenn man es weiß, aber für mich war es eine Zeit lang nicht offensichtlich.

0 Stimmen

Der Nachteil ist, dass Ihr Bibliothekscode nun davon abhängt, dass Rails den Logger bereitstellt, und dass er nicht eigenständig verwendet werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X