這裏就是我在尋找:是否有支持智能參數擴展的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()'只有在需要時纔會完成。除此之外,運氣不佳。 :-) –