Alexander Davliatov
Alexander Davliatov

Reputation: 863

Grails logging not working

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.

Upvotes: 7

Views: 10256

Answers (3)

Nico
Nico

Reputation: 3569

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']
    ...
}

Upvotes: 1

alessandro
alessandro

Reputation: 119

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
}
}

Upvotes: 1

zoran119
zoran119

Reputation: 11307

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.

Upvotes: 4

Related Questions