我正在使用import lombok.extern.slf4j.Slf4j;
对于我的课程,这里是我的日志声明:log.info("{} : {} - {}", String1, String2, String3);
但它无法编译并抱怨上述行:java.lang.String cannot be converted to org.slf4j.Marker
有什么想法吗?
答案 0 :(得分:1)
我想您愿意使用info(String format, Object... arguments)
并且想知道为什么真正调用的方法是info(Marker marker, String format, Object arg1, Object arg2)
。
这与Most Specific Method selection和Identify Potentially Applicable Methods有关。
由于您有四个参数,其中三个完全匹配,info(Marker marker, String format, Object arg1, Object arg2)
方法必须被视为“可能匹配”。
您应该阅读有关变量arity参数的文档以获取更多详细信息。
答案 1 :(得分:0)
我刚刚遇到了同样的问题。我明白这个问题,谢谢 Kraal,但像下面这样的解决方法会有所帮助。
log.info("{} : {} - {}",
new Object[] {String1, String2, String3});
答案 2 :(得分:0)
就我而言,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 后,编译再次开始工作。