Pregunta

Soy bastante nuevo en entornos rubí y yo estaba buscando un buen marco de registro para utilizarlo mi Ruby y Rails aplicaciones.

En mis experiencias anteriores que han utilizado con éxito log4j y log4p (el puerto de perl) y estaba esperando el mismo nivel de utilidad (y madurez) con log4r.

Sin embargo, debo decir que hay una serie de cosas que no están claras en absoluto en el marco log4r.

1 Logger Inheritance

No parece que será administrada a toda la herencia registrador!

Si declaro un registrador llamado 'miaplicacion' y luego tratar de obtener un nombre de registrador 'miaplicacion :: motor', la búsqueda terminará con una NameError.

Yo esperaría que el marco devuelve el registrador raíz de acuerdo con el esquema de nombres y de utilizar el registrador 'miaplicacion'.

Q1 : Por supuesto que puede evitar este y gestionar los nombres por mí mismo con un método de búsqueda, sin embargo hay una manera más limpia de hacer esto sin ningún extra de codificación?

2 YAML de configuración

La segunda cosa que me confunde es la configuración YAML. En el sitio log4r hay literalmente ninguna información sobre este sistema, los enlaces hacia adelante doc a páginas que faltan, así que toda la información que puedo encontrar sobre está contenido en el directorio de ejemplos de la gema.

Yo estaba bastante confundido con el hecho de que la configuración yaml debe contener la sección pre_config, y que necesito para definir mis propios niveles.

Si quito la secion pre_config, o reemplazar todos los niveles “a medida” de las estándar (depuración, información, advertir, mortal), el ejemplo tirará el siguiente error:

log4r/yamlconfigurator.rb:68:in `decode_yaml': Log level must be in 0..7 (ArgumentError)

Así que parece que no hay manera de usar un simple archivo donde sólo declaramos los madereros y appenders para el marco.

Q2 : Yo realmente creo que me haya perdido algo y que debe haber una manera de proporcionar un archivo yaml conf sencilla. ¿Tiene algún ejemplo de un uso de este tipo?

3 variables de sustitución en el archivo XML

Q3 : El sistema de configuración Yaml parece proporcionar una característica sin embargo, era incapaz de encontrar una función similar con los archivos XML. Algunas ideas?

4 Alternativas?

he de decir que estoy muy decepcionado por el nivel de funciones y la madurez de log4r en comparación con el log4j y otros puertos de log4j.

Me encuentro con este marco con un fondo sólido de APIs de registro en otros idiomas y me encuentro trabajando alrededor de todo tipo sólo para hacer 'cosas básicas' que se ejecutan en una “aplicación real”.

Con esto quiero decir una aplicación compleja compuesta de varias joyas, consola / aplicaciones de secuencias de comandos, y una interfaz web rieles donde se debe mutualizadas la configuración y donde hacemos uso intensivo de los espacios de nombres y herencia.

Me he encontrado varias búsquedas con el fin de encontrar algo más adecuado o madurar, pero no encontró nada similar.

Q4 :? Es lo que ustedes ausencia total de alternativas (graves) a log4r marco que podrían utilizarse en una aplicación de clase empresarial

Gracias lectura de todo esto!

Te lo agradecería cualquier punteros,

Saludos cordiales,

¿Fue útil?

Solución

Estoy de acuerdo que la documentación log4r es bastante pobre. Estamos utilizando, aunque y nos sirve bastante bien, vamos-a-decir en una aplicación enterprisey.

No estamos utilizando la herencia registrador, así que no puedo ayudarle con él, y también no sé acerca de cualquier software alternativo, pero:

Este es el código que usamos para leer la configuración YAML (de hecho, creo que le pasamos como ya se ha cargado en un Hash), que también apoya la sustitución de variables:

require 'log4r'
require 'log4r/yamlconfigurator'

y = "log4r_config:

  # define all loggers ...
  loggers:
    - name      : production
      level     : INFO
      trace     : 'false'
      outputters:
        - stdout

  # define all outputters (incl. formatters)      
  outputters:
    - type     : StdoutOutputter
      name     : stdout
      formatter:
        date_pattern: '%Y-%m-%d %H:%M:%S'
        pattern     : '%d %l: #\{TEST\} %m '
        type        : PatternFormatter"

h = YAML.load y
log_cfg = YamlConfigurator
log_cfg['TEST'] = 'foobar'
log_cfg.decode_yaml h['log4r_config']
@log = Logger['production']
@log.info 'test'
#=>2010-05-20 14:36:32 INFO: foobar test 

Otros consejos

Como estoy todavía 'luchar' con la configuración yaml tarde me abrí un poco en el código de la configuración XML y encontré la respuesta para Q3 concenrning la posibilidad de sustitución parámetro.

En realidad funciona de una manera muy similar a la materia yaml, todo lo que necesita es hacer referencia a los parametros con # {VARIABLE} en el archivo XML:

<filename>#{logdir}/processing.log</filename>

y para ponerlos en el configurador antes de leer el archivo XML:

Log4r::Configurator['logdir']=log_dir_param
...
Log4r::Configurator.load_xml_file(conf_file_xml)

También cuando mencionan que la documentación log4r es realmente en mal estado (un montón de error 404) que estaba hablando el documento disponible en RubyForge ...

Me finaly terminó examinado el proyecto de sourceforge y encontró un 'agradable' (de una manera rubí) doc en http://log4r.sourceforge.net/rdoc .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top