Debug ya da analiz amacıyla, uygulama tarafından yapılan tüm SQL sorgularını loglamak istediğinizde application.conf içerisinde aşağıdaki ayarı yapmanız yeterli olur.
# Debug SQL statements (logged using DEBUG level): jpa.debugSQL=true
Bu ayarı yaptıktan sonra çıktıda aşağıdakine benzer SQL loglarını görebilirsiniz.
23:48:07,200 DEBUG ~ insert into tbl_user (id, adres, age, name) values (null, ?, ?, ?) 23:48:24,580 DEBUG ~ select user0_.id as id2_, user0_.adres as adres2_, user0_.age as age2_, user0_.name as name2_ from tbl_user user0_ where user0_.name=? limit ?
log4j ayarları için uygulamanızın conf/ dizini içerisinde log4j.properties dosyası oluşturmanız yeterlidir. Farklı kurulumlar için farklı ayarlara ihtiyacınız olursa application.conf içerisinde aşağıdaki gibi farklı dosyalar belirtebilirsiniz.
application.log.path=/log4j-dev.properties %prod.application.log.path=/log4j-prod.properties
Logları standart çıktıya yönlendiren örnek bir log4j.properties dosyasının içeriği aşağıdaki gibidir.
log4j.rootLogger=DEBUG, Console # Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d %-5p - %m%n
Burada layout.ConversionPattern ayarına %c parametresini eklersek her bir logun hangi Logger aracılığıyla yazıldığını görebiliriz. Play Framework varsayılan olarak play Logger'ını kullanır. Eğer SQL logları farklı bir Logger ile yazılıyorsa gerekli ayarları yaparak bu logları istediğimiz çıktıya yönlendirebiliriz.
log4j.appender.Console.layout.ConversionPattern=%d %-5p - [%c] %m%n
2012-08-24 00:17:47,611 INFO - [play] Automatically applying evolutions in in-memory database 2012-08-24 00:17:47,916 DEBUG - [org.hibernate.SQL] select user0_.id as id0_, user0_.adres as adres0_, user0_.age as age0_, user0_.name as name0_ from tbl_user user0_ where user0_.name=? limit ?
Loglardan anlaşıldığı üzere SQL logları için org.hibernate.SQL Logger'ı kullanılıyor. SQL loglarını logs/sql.log isimli bir dosyaya kaydetmek için aşağıdaki ayarlar yeterli olur.
log4j.rootLogger=ERROR, Console log4j.logger.play=INFO log4j.logger.org.hibernate.SQL=DEBUG, SQL log4j.additivity.org.hibernate.SQL=false # Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d %-5p - [%c] %m%n # SQL log4j.appender.SQL=org.apache.log4j.FileAppender log4j.appender.SQL.File=logs/sql.log log4j.appender.SQL.layout=org.apache.log4j.PatternLayout log4j.appender.SQL.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} - %m%n
log4j.additivity.org.hibernate.SQL=false ayarı ile bu Logger'ın üst seviye Logger ayarlarını miras almamasını sağlıyoruz. Böylece SQL logları konsola yazılmayacak, yalnızca logs/sql.log dosyasına kaydedilecektir.
log4j ayarları konusunda daha ayrıntılı bilgi için manual sayfasını ziyaret edebilirsiniz. Ayrıca production ortamında tüm SQL loglarının kaydediliyor olmasının az da olsa bir performans kaybına sebep olacağını unutmayınız.
Follow me on Twitter