Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails和logback_Grails_Groovy_Log4j_Slf4j_Logback - Fatal编程技术网

Grails和logback

Grails和logback,grails,groovy,log4j,slf4j,logback,Grails,Groovy,Log4j,Slf4j,Logback,在我的Grails项目中,我已经成功地用logback替换了log4j,但是我遇到了一些意想不到的事情,我认为这些事情会被自动处理 基本上,有如下代码: log.infosomeObject 在更改为logback之前,这一切都很好。现在,它抱怨方法签名,而ch.qos.logback.classic.Logger希望向其传递一个字符串。我原以为这会由Groovy的某个好东西自动发生,或者谁知道通过对传递的对象调用toString方法,还有什么我不需要关心的。这不是默认行为吗 有没有一种简单的方

在我的Grails项目中,我已经成功地用logback替换了log4j,但是我遇到了一些意想不到的事情,我认为这些事情会被自动处理

基本上,有如下代码: log.infosomeObject

在更改为logback之前,这一切都很好。现在,它抱怨方法签名,而ch.qos.logback.classic.Logger希望向其传递一个字符串。我原以为这会由Groovy的某个好东西自动发生,或者谁知道通过对传递的对象调用toString方法,还有什么我不需要关心的。这不是默认行为吗


有没有一种简单的方法可以让事情正常运行,而不需要查找和更改记录的对象的每一个案例?我认为转换规则看起来很有前景。这是一条正确的道路吗?

Xeon的建议奏效了,不过我很想知道是否还有其他更好的方法

def methodNames = ["trace", "debug", "info", "warn", "error"]
methodNames.each { methodName ->
    def oldMethod = ch.qos.logback.classic.Logger.metaClass.pickMethod(methodName, [String] as Class[])
    ch.qos.logback.classic.Logger.metaClass[methodName] = { Object o ->
        oldMethod.invoke delegate, o.toString()
    }
}

也许您可以在引导时使用Groovy元类将方法注入这个类?