从groovy中的静态方法访问非静态;脚本“;

从groovy中的静态方法访问非静态;脚本“;,groovy,Groovy,我有一个名为myScript.groovy的groovy脚本,我使用“javacp.myScript”从命令行运行它。 我试图将log4j logger添加到它中,但不断从静态方法中获取无法访问非静态变量的错误,如果我将logger定义为静态的,编译器会抱怨我不能这样做。我意识到的问题是,这是一个groovy脚本,而不是一个类 我已经尝试了@Field和@Log4j注释,但没有成功。有人能帮我理解怎么做吗 以下是我的代码的外观: myScript.groovy 必须在类上对@Log注释进行注释

我有一个名为myScript.groovy的groovy脚本,我使用“javacp.myScript”从命令行运行它。 我试图将log4j logger添加到它中,但不断从静态方法中获取无法访问非静态变量的错误,如果我将logger定义为静态的,编译器会抱怨我不能这样做。我意识到的问题是,这是一个groovy脚本,而不是一个类

我已经尝试了@Field和@Log4j注释,但没有成功。有人能帮我理解怎么做吗

以下是我的代码的外观:

myScript.groovy
必须在类上对@Log注释进行注释

以下文档中的示例有效

import groovy.util.logging.*

@Log
class Car {
    Car() {
        log.info 'Car constructed'
    }
}

def c = new Car()

如果您需要方法是静态的,并且如果将参数传递给静态方法不是一个好选项,那么您可以让该方法获得它自己对命名记录器的引用

def static void doSomething()
{
    Logger log = Logger.getLogger(getClass().getName())
    // do something

    // how to access log from this static method? defining log as static throws compilation error
    log.info "trying to access logger from static method"
}

有什么原因使剂量测量方法必须是静态的吗?我不想这样做,因为如果我添加了更多需要使用记录器的方法,我必须将记录器传递给所有这些方法。根据Jeffrey的回答,我想添加链接。
def static void doSomething()
{
    Logger log = Logger.getLogger(getClass().getName())
    // do something

    // how to access log from this static method? defining log as static throws compilation error
    log.info "trying to access logger from static method"
}