java.util.logging вопрос шаблона сообщения - PullRequest
4 голосов
/ 03 августа 2010

NetBeans рекомендовал изменить способ записи операторов журналирования с конкатенацией строк, указав Преобразование конкатенации строк в шаблон сообщения , чтобы такой оператор, как:

log.severe("Completed at:  " + new Date());

изменилось на

log.log(Level.SEVERE, "Completed at:  {0}", new Date());

Проблема в том, что теперь Дата не печатается.Вместо этого строка "{0}" буквально печатается вместо.Есть ли что-то еще, что я должен был сделать?

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

Предполагая, что отправленный вами фрагмент кода не является исходным кодом, который вызывал проблемы ... Наличие одного апострофа в вашем сообщении вызовет тип описанной вами проблемы. java.util.logging.Logger.log передает сообщение на java.text.MessageFormat, что требует от вас экранирования от апострофов .

Например:

log.log( Level.FINE, "Can't handle {0}.", id );
log.log( Level.FINE, "Can''t handle {0}.", id );

Журналы:

Cant handle {0}.
Can't handle ID0001.
0 голосов
/ 03 августа 2010

Я знаю, что PrintStream имеет метод format, который работает таким образом, хотя Java использует C-подобный % префикс вместо C # -подобного {} обертка. Но Logger не имеет такого метода. Вместо этого вы вызываете переопределение log, которое, по моему опыту, регистрирует только строку точно так, как указано, и ничего не делает с параметром Object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...