Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.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是否将日志语句与isSomethingEnabled()结合起来_Grails_Groovy - Fatal编程技术网

Grails是否将日志语句与isSomethingEnabled()结合起来

Grails是否将日志语句与isSomethingEnabled()结合起来,grails,groovy,Grails,Groovy,按照groovy的说法,日志语句中包含了诸如isDebugEnabled()等检查 grails是否为生成的代码执行此操作 对于grails服务中的此日志调用: log.debug("competitors errors stage 1: ${failedCarrierRequests}") 在反编译的.class文件中,我只看到以下内容: arrayOfCallSite[85].call(log, new GStringImpl(new Object[] { allCompetitorDep

按照groovy的说法,日志语句中包含了诸如isDebugEnabled()等检查

grails是否为生成的代码执行此操作

对于grails服务中的此日志调用:

log.debug("competitors errors stage 1: ${failedCarrierRequests}")
在反编译的.class文件中,我只看到以下内容:

arrayOfCallSite[85].call(log, new GStringImpl(new Object[] { allCompetitorDepartmentsRows.get() }, new String[] { "All competitors: ", "" }));
目前尚不清楚是否在幕后检查日志级别。

自2.2.2起:否

Grails将apachecommons日志字段注入到artifact类中,log4j插件将其与log4j记录器结合

但是,在您的示例中,只传递了一个
GString
。由于它们被惰性地转换为Java
Strings
,log4j记录器将点击自己的内部调试启用检查,并跳过
toString()
调用

但是,如果您做了一些昂贵的事情,如参数构建,并且担心浪费的周期,那么您必须自己调用
isDebugEnabled()

if (log.isDebugEnabled()) {
    log.debug("Some string concatenation with a slow method: " + slowMethod())
}
我应该指出,这个人为的示例可以转换为使用
GString
保存调试检查:

log.debug "GString with lazily initialized slow method call: ${slowMethod()}"

grails用户邮件列表上曾经讨论过添加AST转换以添加检查,但没有讨论到任何地方。

好的,关于GString是延迟加载的响应似乎不支持我的测试

我已经创建了一个测试,基本上用四种不同的方式记录一些东西,并且它似乎评估了任何日志语句GString

以下是我的测试文件要点:

GString的测试失败,在log语句中调用方法


根据他们的模板部分,groovy的人也不应该这么说:

也许反编译groovy类可以回答这个问题?