是否有针对slf4j的Java 1.5 varargs API?

我想摆脱这一批……

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的包装器?

真正的问题是“为什么必须再支持jdk <5”? 如果您有旧版本的Java,请使用旧版API。 就这么简单。 为什么不把它更好地融入当前的Java世界呢? 我的意思是,如果没有Sun / Oracle的支持合同,甚至不支持JDK 5。 在这种情况下,向后兼容性是一个笑话。

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

没有。

问题仍然存在,如何在保持100%向后兼容性的同时做到正确。

欢迎在http://bugzilla.slf4j.org/show_bug.cgi?id=31上查看讨论

那这个呢:

 package util; public class Util { public static Object[] va(Object... args) { return args; } } package foo; import static util.Util.va; ... logger.info("a {}, b {}, cc {}", va("A", "B", "C")); ... 

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

通过阅读Logger的SLF4J javadoc,简单的答案似乎是否定的。 根据我的阅读,他们希望与旧版本的JDK保持兼容。

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

有一种使用varargs和SLF4J的解决方案。

有一个名为Lumberjack的开源项目,它扩展了SLF4J以提供varargs日志记录方法。 扩展是非常自然的,与使用SLF4J相比,你感觉没有任何区别(这是因为Lumberjack只是SLF4J的包装器,因此所有function仍由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"); 

伐木工人网站: https : //github.com/bogdanu/lumberjack

Lumberjack许可证与SLF4J许可证(MIT许可证)相同,因此没有其他许可限制。

免责声明:我是Lumberjack的作者

试试jcabi-log工具包,它用一个方便的vararg接口包装SLF4J日志。