Строковый формат и ведение журнала основных типов - Java - PullRequest
1 голос
/ 13 марта 2020

Я пытаюсь написать класс, который обернут вокруг класса регистратора в Java. Мои функции ведения журнала имеют следующую форму:

public static void LogInfo(String fmt, Object... args) {
    String callerClass = walker.getCallerClass().getName();
    logger.info(String.format("[INFO] [%s] " + fmt, callerClass, args));
}

Проблема, с которой я сталкиваюсь, заключается в попытке записать примитивные типы, bool, int, double, et c. Я немного прочитал об "Autoboxing" и подумал, что это будет работать для меня, но это не так. Когда я пытаюсь войти в систему, например,

int i = 123;
Log.LogInfo("log a number: %d", i);

Я получаю ошибку:

Exception in thread "main" java.util.IllegalFormatConversionException: d != [Ljava.lang.Object;

Я обычно не программист Java, поэтому не уверен, как решить эту проблему. Любая помощь будет принята с благодарностью! Спасибо

1 Ответ

2 голосов
/ 13 марта 2020

Попробуйте

String callerClass = walker.getCallerClass().getName();
logger.info(String.format("[INFO] [%s] ", callerClass) + String.format(fmt, args));

Проблема заключается в том, что при вызове String.format () с callerClass и args Java Varargs создает новый массив, содержащий строку и массив, который не может быть отображен String. формат ().

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