Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用varargs方法的SLF4J参数化测井_Java_Slf4j - Fatal编程技术网

Java 使用varargs方法的SLF4J参数化测井

Java 使用varargs方法的SLF4J参数化测井,java,slf4j,Java,Slf4j,我一定很愚蠢,但我似乎不能使用SLF4J的参数化日志记录方法。 例如: import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LoggingTest { @Test public void loggingTest() { Logger logger = LoggerFactory.getLogger(this.getClass()); int x = 0xde

我一定很愚蠢,但我似乎不能使用SLF4J的参数化日志记录方法。 例如:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LoggingTest {

    @Test
    public void loggingTest() {
        Logger logger = LoggerFactory.getLogger(this.getClass());
        int x = 0xdeadbeef;
        long y = 0xdeadbeef;
    
        try {
            throw new Exception("This is a mighty exception!");
        } catch(Exception e) {
            logger.error("I wanna log {} and {} and {} with backtrace", x, y, 3, e);
        }
    }
}
在日志记录方法上,eclipse会产生这样一个警告:

The method error(String, Object, Object) in the type Logger is not applicable for the arguments (String, int, long, int, Exception)
无法编译

但是,如果我将日志调用更改为:

logger.error("I wanna log {} and {} and {} with backtrace", new Object[]{x, y, 3, e});
它按预期编译和运行(记录3个“变量”和异常堆栈跟踪)

库版本是:slf4j-api-1.7.5.jar、slf4j-log4j12-1.7.5.jar和log4j-1.2.14.jar,如果有区别的话


如果有人能指出我思维能力的不足,我将不胜感激

我做了一些额外的调查,这是获得

logger.error("I wanna log {} and {} and {} with backtrace", x, y, 3, e);
而不是为了

logger.error("I wanna log {} and {} and {} with backtrace", new Object[]{x, y, 3, e});
将使用1.7之前的SLF4J API版本(其中引入了对varargs的支持)。您可能需要深入研究类路径(或服务器运行时?),以找到以下语句不正确的地方:

库版本是:slf4j-api-1.7.5.jar、slf4j-log4j12-1.7.5.jar和log4j-1.2.14.jar,如果有区别的话


(因为它确实与您观察到的不同)

您的字符串中有3个占位符,但有4个参数——这是故意的吗?是的:我认为这解释得很好。根据常见问题解答,第一次尝试编译失败是意料之中的;但是,我不知道第二个怎么工作…@mthmulders我是否正确理解,如果我用整数和long替换原始int和long,那么它应该工作?因为我试过了,但没有。