Affichage des valeurs des paramètres dans les log hibernate

cberthelot's picture
Wed, 04/02/2009 - 18:58 by Clément BERTHELOT |

Bonjour,

J'étais confronté à un problème depuis un moment pour afficher la valeur des paramètres passés dans les requêtes hibernate. Dans les logs, je ne voyais que des points d'interrogations qui n'ont franchement aucune valeur ajoutée.

Je suis tombé aujourd'hui sur cette Jira Hibernate : http://opensource.atlassian.com/projects/hibernate/browse/HHH-2835. Grâce à celle-ci, je viens de résoudre mon problème et peut être cette solution pourra aider certaines personnes.

Pour résumer, il y a incompatibilité entre certaines versions de log4j et certaines versions d'Hibernate et dans ce cas le paramètre org.hibernate.type n'a plus aucune utilité. Pour solutionner le problème, il suffit de suivre ces 4 étapes : 

  • Remplacer dans le fichier log4j la catégorie org.hibernate.type par org.hibernate.type.workaround
  • Dans le fichier HibernateContext.xml, ajouter à la description du bean sessionFactory une dépendance sur un bean hibernate-type-logging-workaround : 
<bean id="SessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" singleton="true" depends-on="hibernate-type-logging-workaround">
  • Ajouter le bean hibernate-type-logging-workaround au fichier HibernateContext.xml
<bean id="hibernate-type-logging-workaround" class="com.test.logger.LogHibernateHelper" singleton="true"  />
  • Ecrire la classe LogHibernateHelper de la manière suivante : 
package com.test.logger;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class LogHibernateHelper {

   public LogHibernateHelper() {

      Log workaroundLog = LogFactory.getLog("org.hibernate.type.workaround");
      Log typeLog = LogFactory.getLog("org.hibernate.type");
     
      if (workaroundLog instanceof org.apache.commons.logging.impl.Log4JLogger
         &amp;&amp; typeLog instanceof org.apache.commons.logging.impl.Log4JLogger){
         
         org.apache.log4j.Logger log4jWorkaroundLogger = (org.apache.log4j.Logger)
           ((org.apache.commons.logging.impl.Log4JLogger)workaroundLog).getLogger();
         org.apache.log4j.Logger log4jTypeLogger = (org.apache.log4j.Logger)
           ((org.apache.commons.logging.impl.Log4JLogger)typeLog).getLogger();
         log4jTypeLogger.setLevel(log4jWorkaroundLogger.getLevel());
      }
   }
}
 
De cette manière on obtient des logs beaucoup plus utiles puisqu’on a non seulement les valeurs des paramètres mais aussi les valeurs retournées.
 

 

même moi qui ne suis pas 1

Submitted by reserve d'argent (not verified) | Mon, 15/06/2009 - 20:46 | #
reserve d&#039;argent's picture
même moi qui ne suis pas 1 pro, j'ai réussi!!! merci.

Ca fonctionne, et même bien.

Submitted by unibet (not verified) | Wed, 10/06/2009 - 17:46 | #
unibet's picture
Ca fonctionne, et même bien. Bravo et merci Maurice.

Merci pour cette solution

Submitted by Anonyme (not verified) | Thu, 23/04/2009 - 14:40 | #
Anonyme's picture
Merci pour cette solution ! Ca devient plus simple pour débugger le code !

salutje suis débutante avec

Submitted by saabrine (not verified) | Wed, 11/03/2009 - 08:42 | #
saabrine's picture

salut

  • je suis débutante avec liferay et j'ai un probleme c que je 'arrive à changer le theme exactement je veux changer le logo et mettre mon propre logo si vous pouvez m'aider expliquez-moi comment clairement .merci pour votre attention

Salut Clément !Ca faisait un

Submitted by Maxence B (not verified) | Wed, 11/02/2009 - 00:13 | #
Maxence B's picture

Salut Clément !

Ca faisait un bail :)

Sympathique solution. Personnellement, lorsque je veux voir ce qui est emis vers la base, j'utilise un wrapper JDBC, comme P6Spy.

C'est une couche qui vient se greffer juste au dessus du driver JDBC et qui logge tout ce qui part vers la base. Plutôt pratique et très très simple à mettre en oeuvre (encore plus que de jouer avec Log4j ! :D)

Par contre, attention : ça peut plomber les perfs et remplir un disque dur en un clin d'oeil s'il y a beaucoup d'activité DB ...

 

Super, j'avais recherché ça

Submitted by Mikael Barbeaux (not verified) | Thu, 05/02/2009 - 12:57 | #
Mikael Barbeaux's picture

Super, j'avais recherché ça il y a quelques mois sans succès.

Je teste ça dès que j'ai un peu de temps, merci Clément !

Très utile en effet, je teste

Submitted by Yoann Ciabaud (not verified) | Wed, 04/02/2009 - 19:41 | #
Yoann Ciabaud's picture

Très utile en effet, je teste ça!

Bonjour,Pourquoi ne pas avoir

Submitted by Damien Gouyette (not verified) | Tue, 24/02/2009 - 22:23 | #
Damien Gouyette's picture

Bonjour,

Pourquoi ne pas avoir simplement activé les traces via log4J ?

exemple :

http://www.cestpasdur.com/Hibernate-sous-le-capot-il-fait

 

Autant pour moi, j'ai mal lu,

Submitted by Damien Gouyette (not verified) | Tue, 24/02/2009 - 22:28 | #
Damien Gouyette's picture

Autant pour moi, j'ai mal lu, tu peux supprimer le commentaire.