6

我正在import lombok.extern.slf4j.Slf4j; 为我的班级使用,这是我的日志语句:log.info("{} : {} - {}", String1, String2, String3);

但它无法编译并抱怨上面的行:java.lang.String cannot be converted to org.slf4j.Marker

请问有什么想法吗?

4

3 回答 3

3

我想您愿意使用info(String format, Object... arguments)并且想知道为什么真正调用的方法是info(Marker marker, String format, Object arg1, Object arg2).

这与最具体的方法选择识别潜在适用的方法有关。

由于您有四个参数,其中三个完全匹配,因此该info(Marker marker, String format, Object arg1, Object arg2)方法必须被视为“潜在匹配”。

您应该阅读有关可变参数参数的文档以获取更多详细信息。

于 2017-02-14T16:36:50.487 回答
0

我刚遇到同样的问题。我理解这个问题,谢谢 Kraal,但是像下面这样的解决方法会很有帮助。

log.info("{} : {} - {}", 
    new Object[] {String1, String2, String3});
于 2021-01-20T15:50:02.283 回答
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,编译又开始工作了。

于 2021-03-21T19:26:20.550 回答