Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Grails logging not working

Tags:

logging

grails

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.

like image 558
Alexander Davliatov Avatar asked Feb 06 '14 09:02

Alexander Davliatov


3 Answers

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
}
}
like image 41
alessandro Avatar answered Oct 06 '22 00:10

alessandro


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.

like image 83
zoran119 Avatar answered Oct 06 '22 01:10

zoran119


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']
    ...
}
like image 22
Nico Avatar answered Oct 05 '22 23:10

Nico