Grails 无法从嵌套闭包访问私有静态字段

Grails 无法从嵌套闭包访问私有静态字段,grails,groovy,slf4j,Grails,Groovy,Slf4j,假设我有以下课程: @Slf4j class MySuperclass { public void testMethod() { def test = [1, 2, 3] test.each {it -> log.info("gab" + it) def test2 = [4,5,6] test2.each { log.info("" + it)

假设我有以下课程:

@Slf4j
class MySuperclass {

    public void testMethod() {
        def test = [1, 2, 3]
        test.each {it ->
            log.info("gab" + it)
            def test2 = [4,5,6]
            test2.each {
                log.info("" + it)
            }
        }
    }
}
然后:

class MySubclass extends MySuperclass {

    public void process() {
        testMethod()
    }
}
调用
mySubclass.process()
时,我得到一个错误:

No such property log for class: com.ingenuity.app.kang.batch.MySubclass
该错误仅针对test2闭包内的行引发。如果我声明一个公共日志字段,它就可以正常工作。如果我在子类中添加
@Slf4j
注释,它也可以正常工作

我不明白这里发生了什么。这是一个groovy bug吗? 我发现这个问题可能与此相关,但它不是相同的行为:

您需要在MySuperClass中添加日志依赖项,如:

import groovy.util.logging.Slf4j

@Grapes([
    @Grab(group='ch.qos.logback', module='logback-classic', version='1.0.13') 
])

@Slf4j
class MySuperclass {
...
}

处理它的一种方法是将log属性作为类上的静态成员引用。位于的项目证明了这一点

这很有效

~ $ git clone git@github.com:jeffbrown/logissue.git
Cloning into 'logissue'...
remote: Enumerating objects: 22, done.
remote: Counting objects: 100% (22/22), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 22 (delta 0), reused 22 (delta 0), pack-reused 0
Receiving objects: 100% (22/22), 53.62 KiB | 1.28 MiB/s, done.
~ $ cd logissue/
  $ ./gradlew run

> Task :run
16:41:19.022 [main] INFO  logdemo.MySuperclass - gab1
16:41:19.027 [main] INFO  logdemo.MySuperclass - 4
16:41:19.027 [main] INFO  logdemo.MySuperclass - 5
16:41:19.027 [main] INFO  logdemo.MySuperclass - 6
16:41:19.027 [main] INFO  logdemo.MySuperclass - gab2
16:41:19.027 [main] INFO  logdemo.MySuperclass - 4
16:41:19.027 [main] INFO  logdemo.MySuperclass - 5
16:41:19.027 [main] INFO  logdemo.MySuperclass - 6
16:41:19.027 [main] INFO  logdemo.MySuperclass - gab3
16:41:19.027 [main] INFO  logdemo.MySuperclass - 4
16:41:19.027 [main] INFO  logdemo.MySuperclass - 5
16:41:19.027 [main] INFO  logdemo.MySuperclass - 6

BUILD SUCCESSFUL in 2s
2 actionable tasks: 2 executed

我想这个链接可能会给你们一些解决问题的想法。我不认为这是问题所在。这就像在
logback中一样,日志记录工作需要依赖关系,但和不能从嵌套闭包访问私有静态成员无关。谢谢Jeff。是的,如问题中所述,我找到了解决办法。我只是想知道这是一个bug还是我做错了什么。我想是的。你所描述的行为与之相关(可能不完全相同)。谢谢,我没有看到。我会接受答案的。
~ $ git clone git@github.com:jeffbrown/logissue.git
Cloning into 'logissue'...
remote: Enumerating objects: 22, done.
remote: Counting objects: 100% (22/22), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 22 (delta 0), reused 22 (delta 0), pack-reused 0
Receiving objects: 100% (22/22), 53.62 KiB | 1.28 MiB/s, done.
~ $ cd logissue/
  $ ./gradlew run

> Task :run
16:41:19.022 [main] INFO  logdemo.MySuperclass - gab1
16:41:19.027 [main] INFO  logdemo.MySuperclass - 4
16:41:19.027 [main] INFO  logdemo.MySuperclass - 5
16:41:19.027 [main] INFO  logdemo.MySuperclass - 6
16:41:19.027 [main] INFO  logdemo.MySuperclass - gab2
16:41:19.027 [main] INFO  logdemo.MySuperclass - 4
16:41:19.027 [main] INFO  logdemo.MySuperclass - 5
16:41:19.027 [main] INFO  logdemo.MySuperclass - 6
16:41:19.027 [main] INFO  logdemo.MySuperclass - gab3
16:41:19.027 [main] INFO  logdemo.MySuperclass - 4
16:41:19.027 [main] INFO  logdemo.MySuperclass - 5
16:41:19.027 [main] INFO  logdemo.MySuperclass - 6

BUILD SUCCESSFUL in 2s
2 actionable tasks: 2 executed