Question

Je suis assez nouveau à ruby environnements et j'ai été la recherche d'une belle structure de journalisation à utiliser mon ruby et rails applications.

Dans mes précédentes expériences, j'ai utilisé avec succès log4j et log4p (perl port) et attend le même niveau de facilité d'utilisation (et de la maturité) avec log4r.

Cependant, je dois dire qu'il y a un certain nombre de choses qui ne sont pas clair du tout dans le log4r cadre.

1 Enregistreur Héritage

L'enregistreur de l'héritage ne semble pas être géré à tous !

Si je déclare un bûcheron nommé 'myapp' et puis essayer d'obtenir le nom de l'enregistreur 'myapp::moteur", la recherche se terminera avec un NameError.

Je m'attends à ce que le cadre retourne la racine enregistreur selon le schéma de nommage et d'utiliser le 'myapp' enregistreur.

T1 :Bien sûr, je peux contourner ce et de gérer les noms par moi-même avec une méthode de recherche, cependant est-il une manière plus propre de le faire sans aucun codage supplémentaire ?

2 configuration YAML

Deuxième chose qui me confond est la configuration yaml.Sur le log4r site il y a littéralement aucune information sur ce système, la doc des liens vers l'avant pour les pages manquantes, de sorte que toutes les infos que je peux trouver sur est contenue dans les exemples du répertoire de la gemme.

J'ai été assez confus avec le fait que la configuration yaml doit contenir les pre_config section, et que j'ai besoin de définir mes propres niveaux.

Si je supprime le pre_config secion, ou de remplacer tous les “custom” par le standard ( debug, info, warn, fatale ) , l'exemple de jeter l'erreur suivante :

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

Il semble donc y avoir aucun moyen de l'aide d'un simple fichier où nous seulement déclarer les bûcherons et les appenders pour le cadre.

T2 :Je vraiment crois que j'ai raté quelque chose et que doit être un moyen de fournir un simple yaml fichier conf.Avez-vous des exemples d'une telle utilisation ?

3 Variables de substitution dans le fichier XML

T3 :La configuration Yaml système semble fournir une telle fonctionnalité, cependant, j'ai été incapable de trouver une fonction similaire avec des fichiers XML.Des idées ?

4 solutions de rechange ?

Je dois dire que je suis très déçu par le niveau de fonctionnalité et de la maturité de log4r par rapport à la log4j et d'autres log4j ports.

J'ai couru dans ce cadre avec un solide bagage de journalisation de l'Api dans d'autres langues, et je me retrouve à travailler dans toutes sortes juste pour faire des choses de base " en cours d'exécution dans un “monde réel de l'application”.

Je veux dire par là une application complexe composé de plusieurs pierres précieuses, de la console de script ou des applications, et des rails web front-end où la configuration doit être mutualisés et où nous en faire un usage intensif des espaces de noms et d'héritage.

J'ai mené plusieurs recherches afin de trouver quelque chose de plus approprié ou mature, mais n'a pas trouvé quelque chose de semblable.

T4 :Les gars, vous ne savez tout (graves) les solutions de rechange à log4r cadre qui pourrait être utilisé dans une entreprise de classe de l'app ?

Merci de lecture tout cela !

J'ai vraiment apprécier toutes les pointeurs,

Cordialement,

Était-ce utile?

La solution

Je suis d'accord que le log4r la documentation est assez pauvre.Nous sommes en l'utilisant bien et il nous sert assez bien, allons-dire un enterprisey app.

Nous ne sommes pas à l'aide de l'enregistreur de l'héritage donc je ne peux pas vous aider avec elle, et aussi je ne sais pas à propos de tout autre logiciel, mais:

Voici le code que nous utilisons pour lire de configuration YAML (en fait, je pense que nous passons comme déjà chargées dans une table de Hachage), il prend également en charge la substitution de variable:

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 

Autres conseils

Comme je suis encore "combats" avec la configuration yaml, j'ai creusé un peu dans le code de la configuration XML et trouvé la réponse pour T3 concenrning le param remplacement.

Effectivement, il fonctionne d'une manière très semblable à la yaml trucs, tous vous avez besoin est de référencer les params par #{NOMVAR} dans le fichier xml:

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

et pour les mettre dans le configurateur avant de lire le fichier xml :

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

Aussi, quand j'ai mentionné que le log4r la documentation est vraiment dans un mauvais état ( beaucoup de erreur 404) je parlais de la doc disponible sur rubyforge ...

J'ai enfin fini par regarder le projet sur sourceforge, et a trouvé un "gentil" (dans un rubis moyen) doc sur http://log4r.sourceforge.net/rdoc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top