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

时间:2009-12-23 13:54:25

标签: 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 ... args);

...因此我的日志记录语法不必根据我想记录的参数数量而改变。似乎有很多讨论和解决方法,但它在哪里?或者我应该包装slf4j的包装?

7 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:11)

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

答案 2 :(得分:7)

没有。

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

欢迎在http://bugzilla.slf4j.org/show_bug.cgi?id=31

看到讨论

答案 3 :(得分:5)

这个怎么样:

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()。

答案 4 :(得分:4)

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

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

答案 5 :(得分:1)

有一种使用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");

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

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

免责声明:我是Lumberjack的作者

答案 6 :(得分:0)

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