Подтвердить что ты не робот

Форматирование чисел с плавающей запятой в SLF4J

Я хотел бы отформатировать мои парные разряды и плавать до определенного количества десятичных знаков с помощью SLF4J.

В принципе, я ищу эквивалент Java String.format("%.2f", floatValue) в SLF4J.

Прочитав документацию по SLF4J и поиск по Google, я не мог найти подсказки, имеет ли она эту функцию.

Я использую slf4j-api:1.7.6 и slf4j-jdk14:1.7.6

Любая помощь очень ценится.

4b9b3361

Ответ 1

Я предполагаю, что вы ссылаетесь на соглашение 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поэтому он вряд ли изменит

(источник)

Ответ 2

Несколько уродливым решением, которое может быть связано с созданием временного объекта, может быть это

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