log4j2: пользовательское форматирование для параметра шаблона - PullRequest
0 голосов
/ 22 октября 2019

Обычно регистрация выглядит следующим образом:

Duration duration = ...;
log.info("Duration: {}", duration);

Но что делать, если вам нужно пользовательское форматирование?

if (log.isInfoEnabled()) {
    String value = duration.toSeconds() + "." + duration.toMillis();
    log.info("Duration: {}", value);
}

В этом случае код сложен. Я ищу способ сделать простое ведение журнала, как в первом примере, но чтобы иметь возможность настраивать форматирование значений, используя некоторый механизм, например, определить функцию форматирования для данного типа:

LogSystem.install(Duration.class, duration -> {
    return String.format("%d.%d", duration.toSeconds(), duration.toMillis();
});

Вопросы:

  • имеет ли log4j 2.x такую ​​или похожую функцию?
  • может быть, он существует в других библиотеках журналов?
  • если нет, можно ли как-нибудь упростить if (log.isInfoEnabled()) { ... }?

1 Ответ

0 голосов
/ 10 ноября 2019

имеет ли log4j 2.x такую ​​или похожую функцию?

Да, вы можете использовать

log.info("Duration: {}.{}", duration.toSeconds(), duration.toMillis());

Вы можете передать столько параметров, сколько захотите. Если вы используете параметризованное ведение журнала, вам не нужно проверять log.isInfoEnabled ().

, возможно, он существует в других библиотеках ведения журнала?

SLF4j также поддерживает параметризованноепротоколирование.

...