我想摆脱这一批......
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的包装?
答案 0 :(得分:14)
真正的问题是“为什么必须再支持jdk< 5”?如果您有旧版本的Java,请使用旧版API。就这么简单。为什么不把它更好地融入当前的Java世界呢?我的意思是,如果没有Sun / Oracle的支持合同,甚至不支持JDK 5。在这种情况下,向后兼容性是一个笑话。
答案 1 :(得分:11)
这终于解决了。 SLF4J 1.7.0现在需要JDK 1.5并且具有向后兼容的varargs方法。
答案 2 :(得分:7)
答案 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)
答案 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日志。