Spring JDBC n'est pas logging SQL avec log4j

je cherche le ressort pour un commutateur possible à une pile de ressorts. Une des choses que je pensais être cool était la capacité pour JDBC printemps pour enregistrer tous les SQL exécutés. Donc j'ai mis log4j, j'ai mis en place un log4j.fichier de propriétés. et pas de sql.

voici le log4j.fichier de propriétés:

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

voici la sortie pour quelques insert sql vraiment simple via spring jdbc: http://pastie.org/713189

4
demandé sur C. Ross 2009-11-24 22:08:05

6 réponses

essayez de configurer ces loggers supplémentaires log4j . La première va cracher le SQL qui passe à travers le JdbcTemplate de spring , la seconde vous donne des valeurs de paramètre que Spring fixe sur des 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>

il est clair que cela ne va fonctionner que si vous exécutez directement ou indirectement SQL en utilisant JdbcTemplate .

10
répondu serg10 2013-05-09 10:31:53

Êtes-vous sûr que c'est le log4.properties que votre application capte? J'ai copié le log4j.properties que vous avez posté dans une application de printemps sur ma machine locale, et j'ai eu une tonne d'entrées de débogage de printemps 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 se faisant pas lire correctement sont:

  • log4j.properties n'est pas sur votre chemin de classe. Vous pouvez j'essaie de faire un class.getResource() dessus pour voir s'il le trouve.
  • il y a un autre log4j.properties sur votre chemin de classe.
  • quelque chose fait que commons-logging choisit d'utiliser un logger différent. Vous pouvez trouver des instructions pour allumer le commons-logging diagnositics ici
2
répondu Jason Gritman 2009-11-25 03:40:20

Essayer

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

ça m'a aidé, DEBUG ça n'a pas suffi. Je suis à l'aide de org.springframework.jdbc-3.0.6.PUBLIER.bocal avec log4j-1.2.15 et slf4j (1.6.4)

pour juste un SQL (i.e. si vous n'êtes pas intéressé par les valeurs des paramètres liés) DEBUG devrait être suffisant.

2
répondu Kroky 2013-03-20 10:06:54

de ma compréhension Le printemps imprimera l'information quand vous utilisez la déclaration préparée.

Voir cette discussion Printemps du forum.

0
répondu DJ. 2009-11-24 19:34:26

comment exécutez-vous le SQL? Spring ne va pas magiquement log 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 , soit directement , soit via JdbcDaoSupport , alors oui, le SQL sera enregistré pour certaines opérations, mais seulement celles qui impliquent des opérations directes SQL.

si vous utilisez des instructions D'hibernation ou préparées, alors le printemps ne voit jamais le SQL et ne peut donc pas le logger.

si vous postez un code d'exemple qui montre comment vous exécutez votre SQL, cela aiderait beaucoup.

0
répondu skaffman 2009-11-24 20:05:43

Dans L'Hypothèse Du Printemps 3.0.7.RELEASE et log4j 1.2.17, nous avons obtenu la tâche accomplie via:

 <!-- 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.

remplaçant <category/> par <logger/> fonctionne aussi très bien.

0
répondu xerx593 2014-05-07 15:03:47