2009-11-24 5 views
4

Je recherche un ressort pour un basculement possible vers une pile de ressorts. Une des choses que je pensais être cool était la possibilité pour spring jdbc d'enregistrer tous les sql exécutés. J'ai donc mis dans log4j, mis en place un fichier log4j.properties. et pas de sql.Spring JDBC n'enregistre pas SQL avec log4j

ici est le fichier log4j.properties:

log4j.appender.stdout=org.apache.log4j.ConsoleAppe nder 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.Patt ernLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ ABSOLUTE} %5p %c{1}:%L - %m%n 
log4j.rootLogger=debug, stdout 
log4j.category.org.springframework.jdbc.core=DEBUG 

est ici la sortie pour une sql d'insertion très simple via jdbc printemps: http://pastie.org/713189

+0

Avez-vous redémarré le serveur? Le seuil est-il défini? –

+0

Salut phil ... Qu'est-ce que tu as fait pour résoudre ce problème? –

Répondre

0

De mon ressort de compréhension imprimera des informations lorsque vous utilisez préparé déclaration.

Voir le this discussion sur le forum de Spring.

0

Comment exécutez-vous le SQL? Spring ne va pas magiquement se connecter au SQL qui est envoyé à la base de données, vous devez passer par les canaux appropriés. Par exemple, si vous exécutez SQL en utilisant JdbcTemplate, directement ou via JdbcDaoSupport, alors oui, le SQL sera enregistré pour certaines opérations, mais uniquement pour les opérations qui impliquent le SQL direct. Si vous utilisez Hibernate ou des instructions préparées, Spring ne pourra jamais voir le SQL lui-même et ne pourra donc pas le consigner.

Si vous avez publié un exemple de code qui montre comment vous exécutiez votre SQL, cela aiderait beaucoup.

+0

J'utilise JdbcTemplate de Spring. J'utilise actuellement un exemple de code protégé par des droits d'auteur (d'Enterprise Spring Recicpes), donc je ne pense pas que je devrais le poster. Je vais essayer de pirater mon propre exemple, c'est ma prochaine étape. –

2

Etes-vous sûr que c'est le log4.properties que votre application décroche? J'ai copié le log4j.properties que vous avez posté dans une application Spring sur ma machine locale, et j'ai reçu une tonne d'entrées de débogage Spring en plus de la journalisation JDBC. Je ne vois pas d'entrées de débogage comme ça dans votre sortie.

Quelques coupables probables pour votre log4j.properties ne pas se lire correctement sont:

  • log4j.properties est pas sur votre chemin de classe. Vous pouvez essayer de faire un class.getResource() dessus pour voir si c'est le cas.
  • Il y a un autre log4j.properties sur votre chemin de classe.
  • Quelque chose fait commons-logging choisir d'utiliser un enregistreur différent. Vous trouverez les instructions pour activer les diagnositics commons-logging here
9

Essayez le réglage de ces log4j supplémentaires enregistreurs. Le premier va cracher le SQL qui passe par le JdbcTemplate du printemps, le second vous donne les valeurs des paramètres que Spring définit sur les instructions préparées.

<logger name="org.springframework.jdbc.core.JdbcTemplate"> 
    <level value="debug" /> 
</logger> 

<logger name="org.springframework.jdbc.core.StatementCreatorUtils"> 
    <level value="debug" /> 
</logger> 

cela est clair que ne va fonctionner que si vous êtes directement ou indirectement l'exécution SQL à l'aide JdbcTemplate.

+0

manquant '>' sur la 2ème ligne du code – Isaac

+0

Je l'utilise et encore ça ne marche pas !!! –

+1

La seconde ne donne pas de valeur dans jdbctemplate PreparedStatementSetter – Emilio

2

Essayez

log4j.category.org.springframework.jdbc.core = TRACE 

Cela m'a aidé, DEBUG tout simplement pas assez. J'utilise org.springframework.jdbc-3.0.6.RELEASE.jar avec log4j-1.2.15 et slf4j (1.6.4)

Pour juste un SQL (c'est-à-dire si vous n'êtes pas intéressé par les valeurs de paramètres liés) DEBUG devrait être suffisant.

0

En supposant printemps 3.0.7.RELEASE et log4j 1.2.17, on a réussi la tâche accomplie par:

<!-- activates query logging --> 
<category name="org.springframework.jdbc.core.JdbcTemplate"> 
    <level value="DEBUG"/> 
</category> 
<!-- activates parameter substitution logging --> 
<category name="org.springframework.jdbc.core.StatementCreatorUtils"> 
    <level value="TRACE"/> 
</category> 

..dans notre log4j.xml. Remplacer <category/> avec <logger/> fonctionne également très bien.