字符串格式和日志记录原始类型 - Java

String Format and Logging primative types - Java

我正在尝试编写一个 class 来环绕 Java 中的记录器 class。我的日志记录函数的形式如下:

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

我遇到的问题是尝试记录原始类型,boolintdouble 等。我阅读了一些关于 "Autoboxing" 的内容并思考这对我有用,但不是。当我尝试登录时,例如

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

我得到的错误是:

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

我通常不是 Java 程序员,所以不确定如何解决这个问题。任何帮助将不胜感激! 谢谢

尝试

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

问题是当使用 callerClass 和 args 调用 String.format() 时,Java Varargs 创建了一个包含字符串和数组的新数组,String.format( ).