日誌是在應用程序中的交叉問題。
因此,對於一般情況,我使用攔截器/方面模式來做到這一點。
String className = method.getDeclaringClass().getName();
String methodName = method.getName();
long id = Thread.currentThread().getId();
String name = Thread.currentThread().getName();
String msg = String.format("some text, for: %s %s in thread %d %s",
className, methodName, id, name);
做這些計算,而不當前logger的有效級別之前檢查是一種無感,因爲它即使日誌不寫應用。
此外,所有這些信息可以由API記錄器檢索,如果需要並在appender的模式中指定。
除了這是無效或者:
String msg = String.format("some text, for: %s %s in thread %d %s", className, methodName, id, name);
LOGGER.debug("xxxxxxxx {}", msg);
它還檢查格式化前的水平字符串。
隨着實際的代碼,這是更好的:
if (LOGGER.isDebugEnabled()){
String className = method.getDeclaringClass().getName();
String methodName = method.getName();
long id = Thread.currentThread().getId();
String name = Thread.currentThread().getName();
String msg = String.format("some text, for: %s %s in thread %d %s", className, methodName, id, name);
LOGGER.debug("xxxxxxxx {}", msg);
}
但是,一個更加強大的解決方案是使用附加器的圖案裝飾與線程ID,方法等日誌信息...
最後作爲檢查當前等級(此處:if (LOGGER.isDebugEnabled()){
)未包含測井處理的一般方法,例如:
String msg = String.format("some text, for: %s %s in thread %d %s", className, methodName, id, name);
LOGGER.debug("xxxxxxxx {}", msg);
使用採用var args的log方法會更有效,因爲它是爲您的樣本設計的,而不是用於您的示例,因爲它違背了它的目的。
通過這種方式,不遺餘力計算,如果有效記錄水平不匹配:
LOGGER.debug("some text, for: {} {} in thread {} {}", className, methodName, id, name);
*「這個代碼看起來完全錯誤的我在很多方面」 * - 有什麼辦法?反射被認爲是緩慢的,所以這可能是一個性能上的衝擊 – MadProgrammer
使用適當的日誌記錄模式而不是重新發明輪子會更容易和更有效率...... – assylias