web-dev-qa-db-fra.com

inclure le fichier de propriétés log4j en veille prolongée pour afficher la requête avec la valeur au lieu du point d'interrogation

J'ai le fichier crearte log4j.properties comme ci-dessous:

log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug

log4j.appender.hb=org.Apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.Apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE

Quelqu'un peut-il m'aider à l'inclure dans le fichier hibernate.cfg.xml? Je suis désolé, je ne sais pas vraiment comment fonctionne log4j. Je crée ceci pour afficher ma requête d'hibernation avec value au lieu de ? mais malgré tout, il affiche ? rien ne change, donc que dois-je continuer?

J'ai pris référence à partir d'ici Hibernate show real SQL

16
commit

La propriété 'show_sql' dans votre fichier hibernate.cfg.xml entraîne l'impression des requêtes directement sur la console. 

Log4j permet de consigner les sorties n'importe où, de la console au fichier, en passant par les ports réseau et les bases de données . Mais la configuration simple que vous avez est censée être imprimée également sur la console. Donc, commencez par supprimer la propriété show_sql pour voir si Log4j place quoi que ce soit sur la console.

Si cela ne fonctionne pas, cela indique que Log4j n'est pas configuré correctement. Si vous utilisez hibernate> 3.5, il utilise l’application slf4j, qui utilise logback par défaut au lieu de log4j . Vous pouvez facilement passer à log4j en supprimant les fichiers jarre de journal de votre chemin de classe et en ajoutant slf4j-log4j12. jar et log4j.jar à la place.

Le traçage Log4j imprime également les requêtes en utilisant "?", Mais il imprime également les liaisons de paramètres, c’est-à-dire ce que le "?" sera remplacé par par le pilote de base de données ou le serveur.

13
Geert Pante

S'il vous plaît se référer hibernate référence selon votre version. Voici 3.3 Link

Modifier :- 

  1. Pour configurer la journalisation, vous aurez besoin de slf4j-api.jar dans votre chemin de classe Ainsi que du fichier jar de votre liaison préférée - Slf4j-log4j12.jar dans le cas de Log4J.
  2. Placez le fichier log4j.properties dans votre chemin de classe. Un exemple de fichier de propriétés est distribué Avec Hibernate dans le répertoire src /.
  3. Activer les catégories suivantes du journal 4j.

    org.hibernate.SQL   Log all SQL DML statements as they are executed
    
    org.hibernate.type  Log all JDBC parameters
    
3
bsingh

Dans la plupart des cas, il devrait suffire d'inclure log4j.properties dans le chemin d'accès aux classes de l'application. 

Voir Comment initialiser log4j correctement? .

Le lien en question déjà suggère que vous devriez rechercher des valeurs de paramètre SQL liées qui ne figurent pas dans SQL texte dans des instructions de journal distinctes, comme ceci: TRACE [BasicBinder] binding parameter [1] as [VARCHAR] - john doe.

Mais je recommande de rester avec log4jdbc . C'est assez simple à utiliser. Et il est capable d’intégrer des valeurs de paramètres de requête dans du texte SQL imprimé.

2
Vadzim

Ajoutez ceci aussi 

<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>

votre problème sera résolu.

2
jdev

Vous ne pouvez pas imprimer les valeurs en ligne. Hibernate imprimera toujours le? lors de la journalisation des requêtes. La sortie de la journalisation org.hibernate.type au niveau DEBUG indique les valeurs et les types utilisés pour remplacer ces points d'interrogation.

0
Coffee Monkey

Il n'est pas nécessaire d'ajouter hibernate.cfg.xml, il suffit de le placer dans classpath et de suivre les étapes mentionnées dans ce lien . Consultez ce lien: - http://makecodeeasy.blogspot.in/2013/03/logger -in-spring-web-application.html

0
Rahul Jain

Dans mon cas, n'était pas hibernate.cfg.xml, c'était le fichier log4j.xml dans lequel je mettais le code fourni par @jdev

<property name = "show_sql"> trueaffiche les requêtes SQL

<property name = "format_sql"> trueFormatez la requête affichée sur la console

<property name = "use_sql_comments"> truedes commentaires seront ajoutés aux requêtes

Si votre projet contient 1 000 requêtes imprimées sur la console, définissez les autres sur false: <property name = "show_sql"> true <property name = "format_sql"> false <property name = "use_sql_comments"> false

OU écrivez un appender dans le fichier log4j.xml que j'ai effectué dans mon projet, il suffit d'écrire toutes les requêtes SQL sur un fichier texte distinct spécifié ici: Configuration de la journalisation Hibernate à l'aide du fichier de configuration XML Log4j?

0
JavaDeveloper

j'aime la journalisation SQL avec le proxy de jdbcdslog beaucoup plus que la journalisation hibernate 

Log SQL communiqué avec la base de données

0
Frank M.