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
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
.
Ê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 unclass.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
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.
de ma compréhension Le printemps imprimera l'information quand vous utilisez la déclaration préparée.
Voir cette discussion Printemps du forum.
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.
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.