I'm developing a grails 2.3.4 application and had some logging problems. Actually, I couldn't configure any logging at all (accordingly to http://grails.org/doc/latest/guide/conf.html#logging) - had no output result.
After some brainstorming I figured out, that the grails documentation configs are not working for my project. Nevertheless, some configs variation worked fine (I saw the result on my screen):
log4j = {
appenders {
console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
}
root {
error 'stdout'
additivity = true
}
error 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate',
'net.sf.ehcache.hibernate'
debug stdout: ['edu.dm']
}
The configs like:
debug stdout: ['grails.app.services', 'grails.app.services.edu']
debug stdout: ['grails.app.controllers', 'grails.app.controllers.edu']
failed.
I would be extremely thankful, if anyone could explain my mistakes or share a link with an explanation. The whole project can be found here: https://github.com/AlexDavljatov/EduDM/tree/master/LoggingMiniProject
Many thanks in advance.
Kind regards, Alexander Davliatov.
This configuration works in Grails 2.3.5 project
// log4j configuration
log4j = {
appenders {
// Use if we want to prevent creation of a stacktrace.log file.
'null' name:'stacktrace'
// Use this if we want to modify the default appender called 'stdout'.
console name:'stdout', layout:pattern(conversionPattern: '%d{yyyy-MM-dd HH:mm} -%x- %-5p-%-10c:%m%n')
// Custom log file.
/* rollingFile name:"appLog",
file:"${globalDirs.logDirectory}${appName}.log".toString(),
maxFileSize:'300kB',
maxBackupIndex:1,
layout:pattern(conversionPattern: '%d{[EEE, dd-MMM-yyyy @ HH:mm:ss.SSS]} [%t] %-5p %c %x - %m%n')*/
}
// This is for the built-in stuff and from the default Grails-1.2.1 config.
error 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate',
'net.sf.ehcache.hibernate'
warn 'org.mortbay.log' // Jetty
error 'grails.app' // Set the default log level for our app code.
// Move anything that should behave differently into this section.
switch(Environment.current) {
case Environment.DEVELOPMENT:
// Configure the root logger to output to stdout and appLog appenders.
root {
error 'stdout'
//,'appLog'
additivity = true
}
error 'grails.plugin.springsecurity.web.filter.DebugFilter'
error "grails.plugins.twitterbootstrap"
debug "it.mypackage"
debug "org.hibernate.SQL"
debug 'grails.app.controllers'
debug 'grails.app.services'
debug 'grails.app.taglib'
debug 'grails.app.conf'
debug 'grails.app.jobs'
break
case Environment.TEST:
// Configure the root logger to only output to appLog appender.
root {
error 'stdout'
//,'appLog'
additivity = true
}
//depend how much code write in console
// debug 'grails.app.controllers'
// debug 'grails.app.domain'
// debug 'grails.app.services'
// debug 'grails.app.taglib'
// debug 'grails.app.conf'
// debug 'grails.app.filters'
break
case Environment.PRODUCTION:
// Configure the root logger to output to stdout and appLog appenders.
root {
error 'stdout'
//,'appLog'
additivity = true
}
error 'grails.app'
break
}
}
Start like this:
log4j = {
root {
debug()
}
}
You should get a lot of logging to your console. Then (if that works), try this:
log4j = {
info "grails.app"
}
Among the output you should see log.info
from your controllers and services. Then slowly add to the config.
Don't forget to restart between the changes in Config.groovy
.
For your grails version (2.3.4 http://grails.github.io/grails-doc/2.3.4/guide/conf.html#logging) it seems the problem is you inherit the configuration level from the root. To avoid this you need to specify additivity: false
log4j = {
...
debug additivity: false, stdout: ['grails.app.services', 'grails.app.services.edu', 'grails.app.controllers', 'grails.app.controllers.edu']
...
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With