java.lang.String无法转换为org.slf4j.Marker

时间:2017-01-26 18:45:33

标签: java slf4j lombok intellij-lombok-plugin

我正在使用import lombok.extern.slf4j.Slf4j; 对于我的课程,这里是我的日志声明:log.info("{} : {} - {}", String1, String2, String3);

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

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

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

这与Most Specific Method selectionIdentify 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 后,编译再次开始工作。