Log de SQL statement com Hibernate

7 respostas
B

Eu estou precisando gerar um log com EXATAMENTE o SQL statement executado pelo hibernate em cada transação de insert, update e delete.

Eu uso o Hibernate e também o padrão DAO na minha aplicação.

Sds,

Bianca.

7 Respostas

_

Adicione o seguinte no log4j.properties:

log4j.logger.org.hibernate.SQL=DEBUG

E se quiser os parâmetros também:

log4j.logger.org.hibernate.type=DEBUG
B

LIPE,

eu não tô usando log4j e nem sei usar. Tô meio perdida. Teria que ver isso do início. Alguma dica?

Sds,

Bianca.

_

Você pode não usar, mas o Hibernate usa :wink:

Crie um arquivo chamado log4j.properties na raiz da aplicação (no mesmo lugar onde colocou o hibernate.cfg.xml) e insira o seguinte nele:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.rootLogger=warn, stdout

#para logar as queries
#para desligar, mude para
#log4j.logger.org.hibernate.SQL=WARN
log4j.logger.org.hibernate.SQL=DEBUG

#para logar os parâmetros passados nas queries
#para desligar, mude para
#log4j.logger.org.hibernate.type=WARN
log4j.logger.org.hibernate.type=DEBUG

Como pode ver nas primeiras linhas, isto configura um ConsoleAppender, que faz apenas ‘System.out.println’ nas strings a serem logadas. Para saber como passar para um arquivo, busque no google por “FileAppender example”.

B

LIPE,

Valeu! Funcionou! Ajudou BASTANTE.

Eu preciso apenas do LOG dos INSERTs, UPDATEs e DELETEs executados (COMMITADOS). Potanto ainda tenho duas outras dúvidas que são as seguintes:

1 - Esse LOG que aparece são apenas as operações que foram “COMMITADAS”? Caso não seja, existe uma maneira de fazer essa distinção?

2 - Existe uma forma de eu escolher o tipo de informação de SQL mostrada no LOG? Pois da forma que está ele mostra também os SELECTs executados, e eu só preciso das modificações no Banco. Mostrando os selects cai bastante os desempenho da aplicação também!

Mais uma vez obrigada!

Bianca.

_
  1. Não sei dizer, mas basta fazer um rollback proposital para descobrir.

  2. Aí a coisa complica bastante hehe penso numa solução utilizando interceptors. Aqui um exemplo:
    http://www.hibernate.org/195.html
    Tem certeza que não é mais fácil logar tudo e filtrar depois?

J

Acho que isto vai te ajudar… Não sei se ainda vc quer mas dentro do seu hibernate.cfg.xml você pode colocar está tag

isto vai fazer que todo comando do hibernate seja jogado para o log.

Espero que te ajude.

_

A configuração do log4j.properties sobrescreve esta.

Criado 16 de maio de 2006
Ultima resposta 19 de mai. de 2006
Respostas 7
Participantes 3