在groovy" script"中从静态方法访问非静态

时间:2014-09-15 17:55:34

标签: groovy

我有一个名为myScript.groovy的groovy脚本,我使用“java cp.myScript”从命令行运行。 我试图添加log4j记录器,但继续得到无法从静态方法类型的错误访问非静态变量,如果我将logger定义为静态编译器抱怨说我不能这样做。我意识到的问题是因为这是一个时髦的脚本,而不是一个类。

我尝试了@Field和@ Log4j注释没有任何运气。有人可以帮助我了解如何做到这一点吗?

以下是我的代码的样子:

myScript.groovy

def var1 = getVar1()
def var2 = getVar2()

Logger log = Logger.getLogger(getClass())

// @Log4j here gave compilation error
def static void doSomething()
{
    // 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"

}

2 个答案:

答案 0 :(得分:0)

@Log Annotation必须在类上注释。

以下来自文档的示例

import groovy.util.logging.*

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

def c = new Car()

答案 1 :(得分:0)

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

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"
}