views:

920

answers:

3

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 ?

+2  A: 

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

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

or

Log log = LogFactory.getLog(getClass()) // commons logging
Burt Beckwith
This is how i solved it ATM, but stil means that my class is tied to the logging system even when the logging beans of the entire application get changed.
Azder
+2  A: 

A slightly more Groovy way to do the same thing is:

private static def log = LogFactory.getLog(this)

This takes advantage of the fact that this in a static context refers to the Class object.

Don
Cannot work: this is not available at the time of initializing the static field
Azder
It does work, because in Groovy `this` in a static context refers to the Class object. Obviously this is a difference between Java and Groovy. Try it out if you don't believe me :)
Don
I would assume the package would be org.slf4j.LoggerFactory, is this correct?
Chad Gorshing
No, that's the log4J LogFactory
Don
A: 

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...!

Olivier Gourment
Hi Olivier, this question is kind of stale by now, since it was meant for grails 1.0.4.
Azder
This is not mentioned in the question, though. My answer still stands! :-)
Olivier Gourment