Registro de instruções SQL em Clojure (para JDBC)

Não importa se você usa um pool de conexão (como c3p0) ou JDBC bruto, você pode conectar um DriverSpy, para suportar o registro de instruções SQL (semelhante ao Ruby on Rails).

  • Adicione ao seu project.clj :
:dependencies [ ...
[com.googlecode.log4jdbc/log4jdbc "1.2"]
... ]
  • Certifique-se de atualizar / criar um arquivo log4j.properties em seu caminho de recurso (depende das configurações de seu project.clj)
# the appender used for the JDBC API layer call logging above, sql only
log4j
.appender.sql=org.apache.log4j.ConsoleAppender
log4j
.appender.sql.Target=System.out
log4j
.appender.sql.layout=org.apache.log4j.PatternLayout
log4j
.appender.sql.layout.ConversionPattern= u001b[0;31m (SQL)u001b[m %d{yyyy-MM-dd HH:mm:ss.SSS} u001b[0;32m %m u001b[m %n

# ==============================================================================
# JDBC API layer call logging :
# INFO shows logging, DEBUG also shows where in code the jdbc calls were made,
# setting DEBUG to true might cause minor slow-down in some environments.
# If you experience too much slowness, use INFO instead.

log4jdbc
.drivers=com.mysql.jdbc.Driver

# Log all JDBC calls except for ResultSet calls
log4j
.logger.jdbc.audit=FATAL,sql
log4j
.additivity.jdbc.audit=false

# Log only JDBC calls to ResultSet objects
log4j
.logger.jdbc.resultset=FATAL,sql
log4j
.additivity.jdbc.resultset=false

# Log only the SQL that is executed.
log4j
.logger.jdbc.sqlonly=FATAL,sql
log4j
.additivity.jdbc.sqlonly=false

# Log timing information about the SQL that is executed.
log4j
.logger.jdbc.sqltiming=INFO,sql
log4j
.additivity.jdbc.sqltiming=false

# Log connection open/close events and connection number dump
log4j
.logger.jdbc.connection=FATAL,sql
log4j
.additivity.jdbc.connection=false
  • Modifique sua especificação de conexão para corresponder a algo assim:
(def connection-spec {:classname "net.sf.log4jdbc.DriverSpy"
:connection-uri "jdbc:log4jdbc:mysql://localhost:3306/my-database"
...})

Esteja ciente de que este exemplo especifica o driver do banco de dados no arquivo log4j.properties. Portanto, quando você alterar o mysql para outra coisa, certifique-se de alterar o arquivo log4j.properties também, ou simplesmente remova esta linha nas configurações de log (o DriverSpy tentará carregar automaticamente o driver.)

Confira o site oficial do log4jdbc para mais detalhes.