我正在import lombok.extern.slf4j.Slf4j;
为我的班级使用,这是我的日志语句:log.info("{} : {} - {}", String1, String2, String3);
但它无法编译并抱怨上面的行:java.lang.String cannot be converted to org.slf4j.Marker
请问有什么想法吗?
我正在import lombok.extern.slf4j.Slf4j;
为我的班级使用,这是我的日志语句: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)
.
由于您有四个参数,其中三个完全匹配,因此该info(Marker marker, String format, Object arg1, Object arg2)
方法必须被视为“潜在匹配”。
您应该阅读有关可变参数参数的文档以获取更多详细信息。
我刚遇到同样的问题。我理解这个问题,谢谢 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,编译又开始工作了。