Question

I have a class in src/groovy in my grails project.

How do i make a log field that gets injected with the correct logger for that class ?

Is there a commons logging or just log4j in grails ?

Was it helpful?

Solution

You'd add it just like a regular Java class:

Logger log = Logger.getLogger(getClass()) // log4j

or

Log log = LogFactory.getLog(getClass()) // commons logging

OTHER TIPS

Grails 1.X

A more Groovy way to do the same thing is:

private static log = LogFactory.getLog(this)

This takes advantage of the fact that this in a static context refers to the Class object, so the line above can be copy-pasted from one class to another without modification.

Grails 2.X

Use the @Log4j annotation introduced in Groovy 1.8. This will add a log property

import groovy.util.logging.Log4j
@Log4j 
class MyClass {

  def doIt() {
    log.info 'hello'
  }
}

A nice benefit of using the annotation is that the logger automatically converts calls such as this:

log.info 'hello'

to:

if (log.isInfoEnabled() {
  log.info 'hello'
}

Using the standard Log4j's new Logger(getClass()) worked, but logged 'java.lang.Class' for me (using Grails 1.2.1). This problem went away with the Sublog plugin and @WithLog. See http://www.grails.org/plugin/sublog. This plugin also does not make Trace become Debug and Fatal Error...!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top