在我的Grails 3.3.2应用程序的BootStrap.groovy中,登录时出现以下异常:
groovy.lang.MissingMethodException: No signature of method: ch.qos.logback.classic.Logger.info() is applicable for argument types: (org.apache.http.message.BasicStatusLine) values: [HTTP/1.1 200 OK]
这是日志语句:
log.info(resp.statusLine)
我知道我可以通过在info方法上调用toString()来解决此问题,但这不是一个好的解决方案,因为我可能需要修复许多日志语句才能解决以前有效的代码。是否为此问题打开了一个错误?
答案 0 :(得分:1)
Grails 3使用Logback作为日志记录库,并且支持变量替换,从而使日志记录效率更高。
通常用户会记录类似
的语句log.debug('found ' + items.size() + ' items: ' + items)
这很昂贵,因为在调用debug()
之前将表达式连接到单个String中,并且如果该记录器的级别不是DEBUG或TRACE,则不会记录任何内容,因此,如果连接的String大(或如果经常调用它),那工作就浪费了。您可以将呼叫包装在已启用的支票中:
if (log.isDebugEnabled()) {
log.debug('found ' + items.size() + ' items: ' + items)
}
但是这会使您的代码混乱。使用Logback,尽管这样做要好得多:
log.debug('found {} items: {}', items.size(), items)
现在,您只需传递一个简单的String加上两个args即可在指定位置进行插值,但前提是为记录器级别启用了log语句。如果没有,那几乎是无人接听。
对于您的日志记录语句,您应该改为:
log.info('{}', resp.statusLine)
或
log.info('Status: {}', resp.statusLine)