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

Azd*_*der 18 grails groovy logging dependency-injection

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

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

有没有公​​共记录或只是log4j grails?

Dón*_*nal 47

Grails 1.X

一个更Groovy方法来做同样的事情是:

private static log = LogFactory.getLog(this)
Run Code Online (Sandbox Code Playgroud)

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

Grails 2.X

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

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

  def doIt() {
    log.info 'hello'
  }
}
Run Code Online (Sandbox Code Playgroud)

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

log.info 'hello'
Run Code Online (Sandbox Code Playgroud)

至:

if (log.isInfoEnabled() {
  log.info 'hello'
}
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用`@ Slf4j` (3认同)

Bur*_*ith 10

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

Logger log = Logger.getLogger(getClass()) // log4j
Run Code Online (Sandbox Code Playgroud)

要么

Log log = LogFactory.getLog(getClass()) // commons logging
Run Code Online (Sandbox Code Playgroud)