gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:00:14 24 4
gpt4 key购买 nike

根据 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 字段注入(inject)到 artefact 类中,log4j 插件将其与 log4j Logger 结合。

但是,在您的示例中,您将 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-user 邮件列表上有一段时间关于添加 AST 转换以添加检查的讨论,但没有任何进展。

关于grails - Grails 是否使用 isSomethingEnabled() 包围日志语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17220685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com