这里就是我在寻找:是否有支持智能参数扩展的String.format一个Java库,多
- 的Java
- 日志库,它可以代替通用日志或SLF4J
- 只有参数扩展时日志级别需要时(即,没有
if (log.isDebugEnabled())
块) - 字符串格式化相同
java.lang.String.format
- 检测java.lang.Throwable中作为最后一个参数和日志STAC ķ跟踪
的目标是这样写代码
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不符合所有这些要求。
AFAIK,参数扩展或使用评估在Java中是不可能的。任何传递给方法的表达式参数(例如'obj.toString()')都必须事先进行评估。许多框架(特别是sl4j)通过接受'Object'而不是'String'提供了一个巧妙的技巧,所以'obj.toString()'只有在需要时才会完成。除此之外,运气不佳。 :-) –