2010-06-05 3 views

Antwort

37

Es gibt zwei Möglichkeiten, darüber zu gehen:

  • Ihrer Bibliothek ist in sich geschlossen Unter der Annahme, und ein Modul verfügt, können Sie ein logger Attribut zu Ihrem Modul hinzufügen und verwenden, die überall in der Bibliothekscode.

    Sie dann entweder einen Initialisierer in config/initializers/ verwenden oder einen config.after_initialize Block in config/environment.rb Logger initialisiert werden, etwa so:

    require 'mylibrary' 
    MyLibrary.logger = Rails.logger 
    

    Dies würde immer noch erlauben Sie sich geschlossene Bibliothek von Skripten verwenden außerhalb Schienen. Was ist nett, gelegentlich.

  • Wenn die Verwendung Ihrer Bibliothek ohne Rails überhaupt keinen Sinn ergibt, können Sie auch einfach Rails.logger direkt verwenden.

In beiden Fällen handelt es sich um einen standardmäßigen Ruby Logger. Bedenken Sie auch, dass der Logger theoretisch nil sein kann.

+0

Vielen Dank, das ist genau das, was ich gesucht habe. – drt

+3

NB: Diese Antwort enthält falsche Informationen und Redakteure wollen nicht, dass ich sie behebe. Wenn Sie (vielleicht) nicht Rails älter als 2.0 verwenden, befassen Sie sich NICHT mit einem Standard-Ruby-Logger. Rails verwendet jetzt [ActiveSupport :: BufferedLogger] (http://apidock.com/rails/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". Stellen Sie in diesem Fall sicher, dass Sie 'ActiveSupport :: BufferedLogger.new' anstelle von' Logger.new' verwenden. Ich habe es versucht und es hat nicht funktioniert. – Lambart

16

Wir können Rails Logger direkt in die 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..." 
+3

Dies funktionierte für mich schließlich, nachdem ich erkannte, dass ich Logger brauchte. Es ist völlig offensichtlich, sobald du es weißt, aber für eine Weile war es für mich nicht offensichtlich. –