Grails 3 записывает не строковый объект в качестве первого аргумента - PullRequest
0 голосов
/ 01 сентября 2018

В BootStrap.groovy в моем приложении Grails 3.3.2 я получаю следующее исключение при регистрации:

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)

Я знаю, что могу обойти это, вызвав toString () для метода info, но это не очень хорошее решение, потому что у меня может быть много операторов журнала, которые мне, возможно, придется исправить, чтобы обойти ранее действующий код. Для этой проблемы открыта ошибка?

1 Ответ

0 голосов
/ 01 сентября 2018

Grails 3 использует Logback в качестве библиотеки журналов и поддерживает замену переменных, что делает регистрацию намного более эффективной.

Часто пользователи регистрируют такие сообщения, как

log.debug('found ' + items.size() + ' items: ' + items)

Это дорого, потому что выражение объединяется в одну строку перед вызовом debug(), и если уровень этого регистратора не DEBUG или TRACE, то ничего не будет зарегистрировано, поэтому, если объединенная строка является большой (или если это часто называют) тогда эта работа теряется. Вы можете заключить звонок в активированную проверку:

if (log.isDebugEnabled()) {
   log.debug('found ' + items.size() + ' items: ' + items)
}

но это загромождает ваш код. Хотя с Logback вам гораздо лучше:

log.debug('found {} items: {}', items.size(), items)

Теперь вы просто передаете простую строку плюс два аргумента для интерполяции в указанных позициях, но только если инструкция уровня log включена для уровня регистратора. Если нет, то звонок почти не работает.

Для вашего оператора регистрации вы должны сделать это вместо:

log.info('{}', resp.statusLine)

или

log.info('Status: {}', resp.statusLine)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...