ruby-on-rails - rails - ruby print in console
¿Cómo configurar Log4r con Rails 3.0.x? (3)
¿Alguien puede indicarme un fragmento de código de trabajo que permita la configuración del registro mediante un archivo YAML y la inicialización en tiempo de ejecución?
Escribí un blog detallado sobre cómo configurar log4r de manera que reemplace al registrador de rieles estándar. Además, expliqué en detalle cómo usar múltiples registradores, usar niveles de registro y cómo registrar Mongoid, ActiveRecord y Exceptions (incluidas las trazas de pila) utilizando Log4r.
Otra gema aparentemente más madura llamada " Logging " se sugirió en los comentarios en el hilo de HackerNews correspondiente al artículo, por lo que las personas interesadas en Log4r también deberían consultar esta gema.
Intenté configurar log4r con Rails 3.0.4 basado en este artículo: 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''
He buscado en Google para una integración de Rails 3, pero no he encontrado una solución que funcione. ¿Alguien puede indicarme un fragmento de código de trabajo que permita la configuración del registro mediante un archivo YAML y la inicialización en tiempo de ejecución?
Solo como referencia, puse el logger.rb de muestra en la carpeta config / initializers y el log4r.yml en el directorio config.
Gracias
Jeje ... La idea de Log4r proviene de la famosa "Log4j", que es mi registrador favorito en mi vida de programación en Java. Sin embargo, el documento de log4r es realmente malo y muy difícil para los novatos. Déjame mostrarte mi solución:
Paso 1. cree el archivo de configuración log4r: (nombre de archivo: 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,
# e.g. rails_2017-05-03.log
filename: "my_app.log"
formatter:
date_pattern: ''%H:%M:%S''
pattern : ''%d %l: %m ''
type : PatternFormatter
paso 2. modificar 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
paso 3. añade esta línea a tu Gemfile.
# which is the latest version and support "datefileoutputter"
gem ''log4r'', ''1.1.9''
(Si está utilizando Rails 4+, todavía hay un paso 4: agregue este archivo a la carpeta config / initializers
# config/initializers/log4r_patch_for_rails4.rb
class Log4r::Logger
def formatter()
end
end
)
Está hecho. Ahora "cd" en la carpeta de la aplicación Rails, ejecute "bundle" para instalar log4r, luego "rails s", encontrará los archivos de registro en la carpeta "/ log" de esta manera:
May 9 17:05 rails_2011-05-09.log
May 10 13:42 rails_2011-05-10.log
y el contenido del registro es (mi formato favorito):
$ 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
Mi entorno:
- OS: cygwin corriendo en XP
- ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]
- rieles: 3.0.5
- gema: 1.6.0
Cualquier pregunta por favor hágamelo saber ~ :-)
consulte: https://.com/a/20154414/445908
Para imitar el comportamiento de registro de rieles (inicio de sesión en los archivos de registro dependientes del entorno), uso el siguiente 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