Всем привет. Расскажу о немного странной на первый взгляд проблеме. Как известно, класс Logger кроме всего остального имеет метод log с сигнатурой
public void log(Level level,
String msg,
Object[] params)
По названию поста можно догадаться кто виноват и что делать, но если нет, то прошу под кат.
Пользоваться метод очень просто:
String fileName = "fileName.txt";
String dirName = ...;
logger.log(Level.WARNING, "File {0} does not exist in directory {1}", new Object[]{fileName, dirName});
Цифры в фигурных скобках - это параметры, котороые поочереди выбираются из массива Object. В этом случае метод работает как и ожидалось. На место параметров попадают значение имени файла и директории.
Но, предположим, вы решили использовать сокращенный вариант английского отрицания:
logger.log(Level.WARNING, "File {0} doesn't exist in directory {1}", new Object[]{fileName, dirName});
Тут вас ждет небольшой сюрприз. В логе вы увидите вот что:
File fileName.txt doesn't exist in directory {1}.
То есть первый параметр был заменен на нулевой элемент массива Object, а второй нет. Дело в том, что метод log передает текст сообщения в класс java.text.MessageFormat, который по всей видимости требует экранирования спец-символов, к числу которых относится апостроф (одиночная кавычка).
"File {0} doesn''t exist in directory {1}"
public void log(Level level,
String msg,
Object[] params)
По названию поста можно догадаться кто виноват и что делать, но если нет, то прошу под кат.
Пользоваться метод очень просто:
String fileName = "fileName.txt";
String dirName = ...;
logger.log(Level.WARNING, "File {0} does not exist in directory {1}", new Object[]{fileName, dirName});
Но, предположим, вы решили использовать сокращенный вариант английского отрицания:
logger.log(Level.WARNING, "File {0} doesn't exist in directory {1}", new Object[]{fileName, dirName});
Тут вас ждет небольшой сюрприз. В логе вы увидите вот что:
File fileName.txt doesn't exist in directory {1}.
То есть первый параметр был заменен на нулевой элемент массива Object, а второй нет. Дело в том, что метод log передает текст сообщения в класс java.text.MessageFormat, который по всей видимости требует экранирования спец-символов, к числу которых относится апостроф (одиночная кавычка).
"File {0} doesn''t exist in directory {1}"
Комментариев нет:
Отправить комментарий