Grails und SQL Logging

Problem: Die abgesetzten SQL Statements sollen in das Log, aber nicht in die Konsole.

Hintergrund: Die Ausgabe des SQL wird durch die Standardkonfiguration der Datenquelle in die Konsole geleitet.

Lösung: Die Log4j Konfigurationen nutzen, um die gleiche Ausgabe in einer separaten Logdatei ausgeben zu lassen.

Hier eine Beispielhafte Konfiguration in Grails 2.5.0.

// grails-app\conf\DataSource.groovy
dataSource {
...
logSql = false
...
}
// grails-app\conf\Config.groovy
log4j = {
def pattern = new PatternLayout("%d [%t] %-5p %c %x - %m%n")
appenders {
appender new org.apache.log4j.RollingFileAppender(name:"file",
file:"log/app.log",
layout: pattern,
maxFileSize:"100MB",
maxBackupIndex: 100)
appender new org.apache.log4j.RollingFileAppender(name:"hibernate",
file:"log/hibernate.log",
layout: pattern,
maxFileSize:"100MB",
maxBackupIndex: 100)
appender new ConsoleAppender(name:"stdout",
layout: pattern)
}
root {
error "file", "stdout"
}
...
trace additivity: false,
hibernate: ['org.hibernate.SQL',
'org.springframework.security']
}

Kommentare