java.lang.String 无法转换为 org.slf4j.Marker
java.lang.String cannot be converted to org.slf4j.Marker
我正在使用 import lombok.extern.slf4j.Slf4j;
对于我的 class,这是我的日志语句:log.info("{} : {} - {}", String1, String2, String3);
但它无法编译并抱怨以上行:java.lang.String cannot be converted to org.slf4j.Marker
有什么想法吗?
我猜你愿意使用info(String format, Object... arguments)
并且想知道为什么真正调用的方法是info(Marker marker, String format, Object arg1, Object arg2)
。
这与 Most Specific Method selection and Identify Potentially Applicable Methods 有关。
由于您正好有四个参数,其中三个完全匹配,因此必须将 info(Marker marker, String format, Object arg1, Object arg2)
方法视为 "potentially matching"。
您应该阅读有关可变 arity 参数的文档以获取更多详细信息。
我刚遇到同样的问题。我明白这个问题,谢谢 Kraal,但像下面这样的解决方法会有所帮助。
log.info("{} : {} - {}",
new Object[] {String1, String2, String3});
在我的例子中,IntelliJ 错误地选择了 Jar“slf4j-api-1.6.1.jar”,而我期望我的代码使用“slf4j-api-1.7.10.jar".
在 SLF4J FAQ 中有一个简短的(但有点微妙的)讨论。更改背后的想法是 Log4J 的创建者使 Log4J 使用 Marker 对象而不是 Strings,而早期的 beta 仅使用 Object。似乎他们将其更改为更宽松。接受的答案指出当类路径有错误的 jar 时选择了错误的方法调用。
如果您使用的是 Lombok,它也会变得更加混乱,因为 @Slf4j
注释会干扰此处使用的类型。
从我的类路径中删除 1.6.1 Jar 并放入 1.7.10 Jar 后,编译再次开始工作。
我正在使用 import lombok.extern.slf4j.Slf4j;
对于我的 class,这是我的日志语句:log.info("{} : {} - {}", String1, String2, String3);
但它无法编译并抱怨以上行:java.lang.String cannot be converted to org.slf4j.Marker
有什么想法吗?
我猜你愿意使用info(String format, Object... arguments)
并且想知道为什么真正调用的方法是info(Marker marker, String format, Object arg1, Object arg2)
。
这与 Most Specific Method selection and Identify Potentially Applicable Methods 有关。
由于您正好有四个参数,其中三个完全匹配,因此必须将 info(Marker marker, String format, Object arg1, Object arg2)
方法视为 "potentially matching"。
您应该阅读有关可变 arity 参数的文档以获取更多详细信息。
我刚遇到同样的问题。我明白这个问题,谢谢 Kraal,但像下面这样的解决方法会有所帮助。
log.info("{} : {} - {}",
new Object[] {String1, String2, String3});
在我的例子中,IntelliJ 错误地选择了 Jar“slf4j-api-1.6.1.jar”,而我期望我的代码使用“slf4j-api-1.7.10.jar".
在 SLF4J FAQ 中有一个简短的(但有点微妙的)讨论。更改背后的想法是 Log4J 的创建者使 Log4J 使用 Marker 对象而不是 Strings,而早期的 beta 仅使用 Object。似乎他们将其更改为更宽松。接受的答案指出当类路径有错误的 jar 时选择了错误的方法调用。
如果您使用的是 Lombok,它也会变得更加混乱,因为 @Slf4j
注释会干扰此处使用的类型。
从我的类路径中删除 1.6.1 Jar 并放入 1.7.10 Jar 后,编译再次开始工作。