2012-01-25 1 views
2

J'utilise log4j pour me connecter à mon application JRuby on Rails. Chaque fois que je pousse l'application, les journaux sont ajoutés à différentes destinations finales. Parfois c'est catalina.out. Parfois, c'est localhost-date.log. parfois c'est catalina-date.log.Journalisation non déterministe utilisant JRuby + Tomcat6 + log4j

Je ne sais pas vraiment pourquoi ce n'est pas pareil à chaque fois.

Quelles sont les choses que je peux vérifier pour savoir pourquoi les journaux sont si peu fiables dans mon environnement?

Répondre

3

C'est assez bizarre en effet - êtes-vous par hasard en utilisant Apache Commons Logging ainsi?

Il est à une courte distance dans l'obscurité, mais chaque fois que je l'expérience quelque chose de bizarre avec log4j et/ou Commons Logging Je me suis immédiatement rappeler et de revisiter les avec ces derniers problèmes bien documentés spécifiquement (voir Think again before adopting the commons-logging API, ou encore plus complet Version Taxonomy of class loader problems encountered when using Jakarta Commons Logging), de façon concise résumée dans la réponse de delfuego pour log4j and the thread context classloader:

Vous semblez avoir trébuché sur le problème majeur avec log4j (et la bibliothèque Apache Commons Logging ), à savoir qu'ils ont du mal ridiculement découvrir une nd interagir avec les bons classloaders comme ils sont utilisés.

Compte tenu de la nature même de la question de classloader, je ne pouvais l'imaginer trébucher votre problème ainsi, par exemple en fonction du classloader actuellement fini par câblage dans votre exploitation forestière, il peut utiliser un propriétés de journalisation différents chemin de recherche et les valeurs par défaut respectives ainsi, voir Why can't log4j find my properties file in a J2EE or WAR application?:

la réponse courte: les classes log4j et le fichier de propriétés ne sont pas dans le cadre de la même classloader. La réponse longue (et que faire à ce sujet): Les conteneurs J2EE ou Servlet utilisent le système de chargement de classes de Java. Sun a modifié la manière dont la classe fonctionne avec la version de Java 2. Dans Java 2, les chargeurs de classe sont organisés dans une relation parent-enfant hiérarchique. Lorsqu'un classloader enfant doit trouver une classe ou une ressource, il délègue d'abord la demande à le parent. [...]

Les problèmes mentionnés sont généralement faciles à remédier en passant à Simple Logging Facade for Java (SLF4J) en effet (. Ce qui arrive d'avoir le même auteur que log4j BTW, Ceki Gülcü), comme l'a suggéré également par delfuego:

[...] le message à retenir est que l'une des principales forces motrices pour le nouveau cadre de journalisation SL4J était d'éliminer ces problèmes entièrement. Vous voudrez peut-être l'échanger et voir si votre vie est faite plus facile.

Enfin, John (en suspens aujourd'hui) aventure avec Logging with log4j on tomcat jruby-rack for a Rails 3 application semble laisser entendre sur les questions respectives et une solution possible via SL4J ainsi.

Bonne chance!

Questions connexes