Come configurare Log4r con Rails 3.0.x?

Ho provato a configurare log4r con Rails 3.0.4 basato su questo articolo: http://www.dansketcher.com/2007/06/16/integrating-log4r-and-ruby-on-rails/

/Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:166:in `sub!': can't convert Pathname into String (TypeError) from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:166:in `block in paramsub' from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:165:in `each' from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:165:in `paramsub' from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:156:in `block in decode_hash_params' 

Ho l’integrazione su Google per Rails 3, ma non ho trovato una soluzione funzionante. Qualcuno può indicarmi uno snippet di codice funzionante che consentirà la configurazione del registro utilizzando un file YAML e l’inizializzazione in fase di runtime?

Proprio come riferimento, ho inserito il file logger.rb nella cartella config / initializers e log4r.yml nella directory config.

Grazie

Hehe … L’idea di Log4r proviene dal famoso “Log4j”, che è il mio registratore preferito nella mia vita di programmazione java. Comunque il doc di log4r è veramente scarso, ed è davvero difficile per i principianti. Lasciami mostrare la mia soluzione:

Passo 1. creare il file di configurazione log4r: (nome file: config / log4r.yml)

 log4r_config: # define all loggers ... loggers: - name : production level : WARN trace : 'false' outputters : - datefile - name : development level : DEBUG trace : 'true' outputters : - datefile # define all outputters (incl. formatters) outputters: - type: DateFileOutputter name: datefile dirname: "log" # notice the file extension is needed! # if you want the file is named by the process, just comment it, # then it will automatically get the same name with its process, # eg rails_2017-05-03.log filename: "my_app.log" formatter: date_pattern: '%H:%M:%S' pattern : '%d %l: %m ' type : PatternFormatter 

passo 2. modificare config / application.rb

 require 'rails/all' # add these line for log4r require 'log4r' require 'log4r/yamlconfigurator' require 'log4r/outputter/datefileoutputter' include Log4r Bundler.require(:default, Rails.env) if defined?(Bundler) module Zurich class Application < Rails::Application #... # assign log4r's logger as rails' logger. log4r_config= YAML.load_file(File.join(File.dirname(__FILE__),"log4r.yml")) YamlConfigurator.decode_yaml( log4r_config['log4r_config'] ) config.logger = Log4r::Logger[Rails.env] end end 

step3. aggiungi questa linea al tuo Gemfile.

 # which is the latest version and support "datefileoutputter" gem 'log4r', '1.1.9' 

(se stai usando Rails 4+, c'è ancora step4: aggiungi questo file alla cartella config / initializers

 # config/initializers/log4r_patch_for_rails4.rb class Log4r::Logger def formatter() end end 

)

E 'fatto. Ora "cd" nella cartella dell'applicazione Rails, esegui "bundle" per installare log4r, quindi "rails s", troverai i file di log nella cartella "/ log" in questo modo:

 May 9 17:05 rails_2011-05-09.log May 10 13:42 rails_2011-05-10.log 

e il contenuto del registro è (il mio formato preferito):

 $ tail log/rails_2011-05-10.log Started GET "/????_settings/19/edit" for 127.0.0.1 at ... 13:42:11 INFO: Processing by ????SettingsController ... 13:42:11 INFO: Parameters: {"id"=>"19"} 13:42:12 DEBUG: ????Setting Load (0.0ms) SELECT "d ... 13:42:12 INFO: Completed 200 OK in 750ms 

Il mio ambiente:

  1. Sistema operativo: cygwin in esecuzione in XP
  2. ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]
  3. rotaie: 3.0.5
  4. gem: 1.6.0

Qualsiasi domanda per favore fatemelo sapere ~ 🙂

fare riferimento a: https://stackoverflow.com/a/20154414/445908

Per simulare il comportamento di registrazione dei binari (collegandosi ai file di log dipendenti dall’ambiente) utilizzo il seguente log4r.yml:

 log4r_config: # define all loggers ... loggers: - name : production level : WARN trace : 'false' outputters : - datefile_production - name : development level : DEBUG trace : 'true' outputters : - datefile_development - name : test level : DEBUG trace : 'true' outputters : - datefile_test # define all outputters (incl. formatters) outputters: - type: DateFileOutputter name: datefile_production dirname: "log" filename: "production.log" formatter: date_pattern: '%H:%M:%S' pattern : '%d %l: %m ' type : PatternFormatter - type: DateFileOutputter name: datefile_development dirname: "log" filename: "development.log" formatter: date_pattern: '%H:%M:%S' pattern : '%d %l: %m ' type : PatternFormatter - type: DateFileOutputter name: datefile_test dirname: "log" filename: "test.log" formatter: date_pattern: '%H:%M:%S' pattern : '%d %l: %m ' type : PatternFormatter 

Qualcuno può indicarmi uno snippet di codice funzionante che consentirà la configurazione del registro utilizzando un file YAML e l’inizializzazione in fase di runtime?

Ho scritto un blogpost dettagliato su come configurare log4r in modo che sostituisca il logger standard delle rotaie. Inoltre sono entrato nei dettagli su come utilizzare più logger, utilizzare i livelli di log e come registrare Mongoid, ActiveRecord ed Exceptions (inclinando le tracce dello stack) usando Log4r.

Un’altra gem apparentemente più matura chiamata ” Logging ” è stata suggerita nei commenti sul thread di HackerNews corrispondente all’articolo, quindi le persone interessate a Log4r potrebbero voler controllare anche questa gem.