web-dev-qa-db-ja.com

SLF4Jでの浮動小数点数のフォーマット

私のdoubleとfloatをSLF4Jで特定の小数点以下の桁数にフォーマットしたいのですが。

基本的に、私はSLF4JでJavaのString.format("%.2f", floatValue)に相当するものを探しています。

SLF4Jのドキュメントを読んでグーグルで調べたところ、その機能があるかどうかのヒントは見つかりませんでした。

slf4j-api:1.7.6slf4j-jdk14:1.7.6を使用しています

どんな助けでも大歓迎です。

36
Matthias Braun

私はあなたが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 なので、変更される可能性はほとんどありません

ソース

25
Isaac

一時オブジェクトの作成を招くやや醜い解決策はこれである可能性があります

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));
19
Svullo