这就是我要找的东西:
if (log.isDebugEnabled())
块)java.lang.String.format
目标是编写像这样的代码
private static final Log log = new Log.getLog(MyClass.class);
// ...
String value = "test";
log.debug("The value is [%s]", value); // [1]
// ...
} catch (Exception e) {
log.error("Caught Exception: %s", e.getMessage(), e); // [2]
}
[1]会打印一个像
这样的日志语句The value is [test]
如果日志级别为INFO
,则不会发生字符串格式化操作。
[2]会打印
Caught Exception: [value of e.getMessage()]
java.lang.Exception
at com.my.org.MyClass.myMethod(MyClass.[line number])
at [...]
这对我来说似乎是非常理智的行为。我很惊讶我找不到这样做的图书馆。
编辑:我应该指定,但是slf4j不符合所有这些要求。答案 0 :(得分:7)
爪哇
带有Logback绑定的SLF4J。
可以替换commons logging或slf4j的日志库
唯一成熟的替代方案是Log4J和java.util.logging
......
仅当日志级别需要时才进行参数扩展(即如果(log.isDebugEnabled())阻止则为no
在SLF4J中输入:
log.debug("Names are: {}", namesCollection);
然后,只有在toString()
返回true(无需明确提供)时才会执行昂贵的isDebugEnabled()
。
字符串格式与java.lang.String.format
相同
您真的需要在日志文件中使用花哨的格式(小数,货币,区域设置)吗?或{}
懒惰扩展(见上文)?
将java.lang.Throwable检测为最终参数和日志堆栈跟踪
SLF4J以这种方式工作since 1.6。
答案 1 :(得分:2)
JBoss有一个logging implementation,它执行printf和MessageFormat样式的格式化。据说它可以单独使用,但我找不到它的项目,除了它与Seam Solder的集成。但是有一些独立的工件:https://repository.jboss.org/nexus/content/groups/public/org/jboss/logging/jboss-logging/