我正在使用java.util.logging为我的应用程序创建日志文件。到目前为止,这非常有效 现在我遇到的问题是info()方法只需要一个字符串作为参数。但我有不同的数据类型要记录,f.e。整数,双精度,自定义对象。 我知道我可以自己构建字符串,我使用String.format等。 我也知道我可以使用log()方法。但是在这里我必须每次都设置日志级别并创建一个Object数组。
我正在寻找的是我可以设置全局日志级别(一次),然后调用这样的方法:
log.info(String message, Object... values);
是否有支持该框架的框架?
答案 0 :(得分:2)
看一下SLF4j/logback,你可以写一些像
这样的东西LOGGER.info("log output var1={} var2={}",var1,var2);
在日志消息中,{}
将被参数替换:
15:41:28.551 [main] INFO d.h.s.Main - log output var1=abc var2=123.45
答案 1 :(得分:2)
是的,它被称为slf4j,您正在寻找的特定API就是这个
org.slf4j.Logger#info(java.lang.String, java.lang.Object...)
这种形式避免了记录器时多余的字符串连接 已针对INFO级别禁用。但是,这种变体会导致隐藏 (和相对较小的)在调用方法之前创建
Object[]
的成本, 即使为INFO禁用了此记录器。采取的变种 {@link #info(String,Object)一个}和{@link #info(String,Object,Object)两个} 论证的存在只是为了避免这种隐藏的代价。
您应该查看slf4j文档页面中的jcl-over-slf4j.jar
我们通过SLF4J实现的JCL将允许您逐步迁移到SLF4J,特别是如果您的软件所依赖的某些库在可预见的将来继续使用JCL。您可以立即享受SLF4J可靠性带来的好处,同时保持向后兼容性。只需用jcl-over-slf4j.jar
替换commons-logging.jar