在Grails-app之外的Grails类中注入日志对象

时间:2009-09-11 12:01:16

标签: logging grails groovy dependency-injection

我的grails项目中有一个src / groovy类。

如何创建一个注入了该类正确记录器的日志字段?

是否有公共记录或只是grails中的log4j?

3 个答案:

答案 0 :(得分:47)

Grails 1.X

执行相同操作的更Groovy方法是:

private static log = LogFactory.getLog(this)

这利用了静态上下文中的this引用Class对象这一事实,因此上面的行可以从一个类复制粘贴到另一个类而无需修改。

Grails 2.X

使用Groovy 1.8中引入的@Log4j注释。这将添加log属性

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

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

使用注释的一个好处是记录器会自动转换这样的调用:

log.info 'hello'

为:

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

答案 1 :(得分:10)

你可以像普通的Java类一样添加它:

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

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

答案 2 :(得分:0)

使用标准Log4j的新Logger(getClass())工作,但为我记录了'java.lang.Class'(使用Grails 1.2.1)。使用Sublog插件和@WithLog解决了这个问题。见http://www.grails.org/plugin/sublog。这个插件也不会使Trace变成Debug和Fatal Error ......!