Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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
slf4j是否有Java1.5varargsAPI?_Java_Logging_Variadic Functions_Slf4j - Fatal编程技术网

slf4j是否有Java1.5varargsAPI?

slf4j是否有Java1.5varargsAPI?,java,logging,variadic-functions,slf4j,Java,Logging,Variadic Functions,Slf4j,我想摆脱这群人 public void info(String msg); public void info(String format, Object arg); public void info(String format, Object arg1, Object arg2); public void info(String format, Object[] argArray); …并用这个替换它 public void info(String format, Object ... arg

我想摆脱这群人

public void info(String msg);
public void info(String format, Object arg);
public void info(String format, Object arg1, Object arg2);
public void info(String format, Object[] argArray);
…并用这个替换它

public void info(String format, Object ... args);

…这样,我的日志语法就不必根据要记录的参数数量而改变。似乎有很多关于它的讨论和工作,但它在哪里?或者我应该包装slf4j吗?

从阅读slf4j javadoc中可以看出,简单的答案似乎是否定的。从我阅读的内容来看,他们希望与旧版本的JDK保持兼容

如果你真的不喜欢使用SLF4J,那么可能是一种选择?

问题仍然是如何在保持100%向后兼容性的同时正确操作

请随意查看

上的讨论真正的问题是“为什么jdk<5必须再支持它”?如果您有较旧版本的java,则使用较旧的API。就这么简单。为什么不让它更好地适应当前的java世界?我的意思是,如果没有Sun/Oracle的支持合同,JDK5甚至不受支持。在这种情况下,向后兼容性是一个笑话。

这是怎么回事:

package util;

public class Util {
  public static Object[] va(Object... args) {
    return args;
  }
}

package foo;
import static util.Util.va;
...
 logger.info("a {}, b {}, c c {}", va("A", "B", "C"));
...

您也可以在其他地方使用va()。

有一种将varargs与SLF4J一起使用的解决方案

有一个名为Lumberjack的开源项目,它扩展了SLF4J以提供varargs日志记录方法。扩展非常自然,与使用SLF4J相比,您感觉不到任何区别(这是因为Lumberjack只是SLF4J的包装,所以所有功能仍然由SLF4J提供)

用法示例:

JackLogger logger = JackLoggerFactory.getLogger(LoggerFactory.getLogger(Weather.class));

logger.info("Hello {}! The current time is {}:{}:{}, and after {} hours the weather will be {}.", "Jack", 13, 30, 0, 5, "sunny");
伐木工人网站:

伐木工人许可证与SLF4J许可证、MIT许可证相同,因此没有额外的许可限制


免责声明:我是Lumberjack

Try toolkit的作者,它用一个方便的vararg接口包装了SLF4J日志记录。

这终于解决了。SLF4J 1.7.0现在需要JDK 1.5,并且具有向后兼容的varargs方法。

如果一个开源项目不接受您的补丁,并且您需要特定的功能,那么答案似乎非常明显,不?@kdgregory-不,不明显&不知道它应该如何工作;这是一种商业(宿命论)思维模式,其中软件=vendor.pay().requestFeature().receiveUpgrade();如果捕获UnsupportedException,则为new Vendor()| | self.screwed()。但是openSource=public.download().use().requestFeature().waituntil(public.getConsensus());if consensus@michael_n-不知道你是如何解释我的评论的,但显而易见的答案是“做一个叉子”。如果项目维护人员希望你做同样的事情,这是很好的,但这并不总是发生的。@kdgregory抱歉,我承认我吹毛求疵(orig的评论不应该被太认真对待)。只是对“显而易见”和最后手段的不同意见/观点。也许10-15年前,开源中的“自由”等同于分叉。在实践中,好的项目被福克斯摧毁;通常是由拒绝沟通的人。我只是主张参与和建立共识是开源的一种优势(而PHB要求@office),而分叉是最后的手段(尽管今天,git和pull请求使分叉不那么悲惨)。Fwiw,API现在存在于slf4j中,所以我想这一切都没有意义。@kdgregory,事实上,作为我哲学论断的一个次要实践补充,在我著名的大型软件公司,他们甚至不允许我修改源代码(即使是内部使用)。它永远不会得到批准,即使是针对一个明显的、严重的安全缺陷的两个字符的修复。我必须扔掉这个库,或者找“外面”的人进行修复,然后让库的新版本获得批准(可能需要等待批准6-12个月(严重))。不,他们希望与旧版本的slf4j保持二进制兼容。支持取决于平台。IBM在他们的平台上支持1.4ón。哦,“为什么必须……”的答案是,slf4j仁慈的独裁者Ceki希望如此。我不明白。。。为什么不让slf4j 2.x与Java5兼容,让slf4j 1.x与Java0.0.1兼容?