加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Grails是否使用isSomethingEnabled()包围日志语句

发布时间:2020-12-14 16:20:47 所属栏目:大数据 来源:网络整理
导读:根据 http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes#Groovy18releasenotes-Log,groovy使用isDebugEnabled()等检查来包围日志语句. grails是否为生成的代码执行此操作? 对于grails服务中的此日志调用: log.debug("competitors errors
根据 http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes#Groovy18releasenotes-Log,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将一个apache commons Log字段注入artefact类,而log4j插件将它与log4j Logger结合在一起.

但是,在您的示例中,您将GString作为唯一参数传递.由于它们被惰性转换为Java字符串,因此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-user邮件列表上有一些关于添加AST转换以添加检查的讨论,但它没有去任何地方.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读