我想用SLF4J格式化我的雙精度值和浮點數到一定的小數位數。格式化SLF4J中的浮點數
基本上,我在尋找SLF4J中Java的String.format("%.2f", floatValue)
的等價物。
通過閱讀SLF4J的文檔和谷歌搜索我找不到提示它是否具有該功能。我使用slf4j-api:1.7.6
和slf4j-jdk14:1.7.6
任何幫助
是非常讚賞。
我想用SLF4J格式化我的雙精度值和浮點數到一定的小數位數。格式化SLF4J中的浮點數
基本上,我在尋找SLF4J中Java的String.format("%.2f", floatValue)
的等價物。
通過閱讀SLF4J的文檔和谷歌搜索我找不到提示它是否具有該功能。我使用slf4j-api:1.7.6
和slf4j-jdk14:1.7.6
任何幫助
是非常讚賞。
我假設你指的是擴大參數的SLF4J的約定,例如:
float f;
...
logger.debug("My number is {}", f);
所以,答案是否定的。從SLF4J 1.7.7開始,你要求做的事情是不可能的,因爲SLF4J的擴展算法不允許定製渲染器(例如通過Log4J提供的渲染器)。
雖然,似乎值得功能請求。
編輯:
好,
{}
是 「只支持」 出於性能考慮,當前格式實現優於的String.format()的10倍。 http://www.slf4j.org/faq.html#logging_performance 所以它不可能改變
(source)
一個有點醜陋的解決方案,即被臨時對象的創建可能是這個
public class DelayedFormatter{
String format; Object[] args;
public DelayedFormatter(String format, Object... args){
this.format = format; this.args = args;
}
public static DelayedFormatter format(String format, Object... args){
return new DelayedFormatter(format, args);
}
@Override public String toString(){
return String.format(format, args);
}
}
然後
import static DelayedFormatter.format;
...
logger.debug("v = {}", format("%.03f", v));
優雅的方法 – sofend
這真的是一個解決方法,而不是一個答案,所以我會l將它添加爲註釋:您可以在記錄器調用中將'String.format'的輸出作爲參數傳遞:'logger.debug(「floatValue is {}」,String.format(「%。2f」,floatValue ));' – megaflop
這違背了SLF4Js參數化日誌記錄的目的,這避免了在未發出日誌消息時的評估。 –
在這種情況下,將調用封裝在'if(logger.isDebugEnabled())logger.debug(...調用String.format ....);'以避免整個混亂。 –