web-dev-qa-db-fra.com

Formatage de nombres à virgule flottante dans SLF4J

J'aimerais formater mes doubles et flottants à un certain nombre de décimales avec SLF4J.

Fondamentalement, je recherche l'équivalent de la String.format("%.2f", floatValue) de Java dans SLF4J.

Après avoir lu la documentation de SLF4J et fait des recherches sur Google, je n'ai pas pu trouver un indice pour savoir s'il avait cette fonctionnalité.

J'utilise slf4j-api:1.7.6 et slf4j-jdk14:1.7.6

Toute aide est très appréciée.

36
Matthias Braun

Je suppose que vous faites référence à la convention SLF4J d'élargissement des paramètres, par exemple:

float f;
...
logger.debug("My number is {}", f);

Donc la réponse est non. Depuis SLF4J 1.7.7, ce que vous demandez est impossible car l'algorithme d'expansion de SLF4J ne permet pas les rendus personnalisés (comme celui disponible via Log4J).

Semble digne d'une demande de fonctionnalité, cependant.

[~ # ~] modifier [~ # ~] :

Bien, {} n'est "pris en charge" que pour des considérations de performances, l'implémentation actuelle du formatage surpasse String.format () 10 fois. http://www.slf4j.org/faq.html#logging_performance il est donc peu probable qu'il change

( source )

25
Isaac

Une solution quelque peu laide qui entraîne la création d'un objet temporaire pourrait être la suivante:

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);
  }
}

puis

import static DelayedFormatter.format;
...
logger.debug("v = {}", format("%.03f", v));
19
Svullo