如何从Groovy源中获取Log4J打印行号

时间:2015-07-07 05:27:43

标签: groovy log4j

我正在使用Geb和Spock编写功能测试,并使用GMavenPlus使用Maven构建。如何配置Log4J以从我的Groovy源文件中打印行号?这是我目前的log4j.properties

log4j.rootLogger=INFO, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%-p] %d{dd-MM-yyyy HH:mm:ss} %c:%L - %m%n

目前,这会产生类似

的消息
[INFO] 2015-07-28 14:13:51,589 Log4jExample:? - Some useful message

这可以在这个小例子中再现

@Grab(group='log4j', module='log4j', version='1.2.17') 
import org.apache.log4j.*

@groovy.util.logging.Log4j
class Log4jExample {
    static void main(def args) {
        log.level = Level.INFO
        log.removeAllAppenders()
        log.addAppender(new ConsoleAppender(new PatternLayout("[%-p] %d %c:%L - %m%n")))
        log.info "Some useful message"
    }
}

1 个答案:

答案 0 :(得分:0)

一种解决方案是添加@CompileStatic注释 你的例子看起来像是

@Grab(group='log4j', module='log4j', version='1.2.17') 
import org.apache.log4j.*

@groovy.util.logging.Log4j
@CompileStatic
class Log4jExample {
   static void main(def args) {
      log.level = Level.INFO
      log.removeAllAppenders()
      log.addAppender(new ConsoleAppender(new PatternLayout("[%-p] %d %c:%L - %m%n")))
      log.info "Some useful message"
  }
}

请注意,通过使用@CompileStatic,将绕过Groovy元对象协议。