【发布时间】:2010-11-27 11:36:09
【问题描述】:
我的 grails 项目中的 src/groovy 中有一个类。
如何创建一个日志字段,为该类注入正确的记录器?
grails 中有公共日志记录还是只有 log4j?
【问题讨论】:
标签: logging grails groovy dependency-injection
我的 grails 项目中的 src/groovy 中有一个类。
如何创建一个日志字段,为该类注入正确的记录器?
grails 中有公共日志记录还是只有 log4j?
【问题讨论】:
标签: logging grails groovy dependency-injection
做同样事情的一个更 Groovy 的方法是:
private static log = LogFactory.getLog(this)
这利用了 this 在静态上下文中引用 Class 对象这一事实,因此可以将上面的行从一个类复制粘贴到另一个类而无需修改。
使用 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'
}
【讨论】:
this 在静态上下文中指的是 Class 对象。显然这是 Java 和 Groovy 之间的区别。不信就试试看:)
您可以像添加常规 Java 类一样添加它:
Logger log = Logger.getLogger(getClass()) // log4j
或
Log log = LogFactory.getLog(getClass()) // commons logging
【讨论】:
使用标准 Log4j 的新 Logger(getClass()) 有效,但为我记录了“java.lang.Class”(使用 Grails 1.2.1)。 Sublog 插件和@WithLog 解决了这个问题。见http://www.grails.org/plugin/sublog。这个插件也不会让 Trace 变成 Debug 和 Fatal Error...!
【讨论】: