Это очень старая тема, во всяком случае, мои два цента, потому что я также предпочитаю использовать java.util.logging.Logger` в моих проектах, где достаточно.
Lambdas делает этот шаблонный расширитель Formatter для нескольких пользовательских параметров более или менее устаревшим, если только вы не пользуетесь его повторным использованием в масштабе всего приложения. В (my) простых сценариях сообщения журнала настраиваются на часть кода, где она вставлена, поэтому String.format()
обычно намного проще и гибче.
Перед тем, как Java 8 и lambdas, Formatter
была единственной возможностью отложить построение сообщения. Единственной альтернативой было, чтобы построить сообщение для входа в систему до того, как произошла проверка на основании уровня loggable
.
С Java 8 lambdas форматирование строк может быть отложено после проверки loggable
, но все же с доступом к исходному контексту метода. Единственным недостатком является то, что все доступные поля должны быть окончательными из-за ограничений лямбда.
Здесь довольно простой фрагмент:
final String val1 = "lambda expression log message";
final Level level = Level.INFO;
Logger.getGlobal().log(level,() ->
String.format("Hello, I'm a %s, evaluated after %s loggable check.", val1, level)
);
Logger.getGlobal().log(level, new RuntimeException(),() ->
String.format("Hello, I'm a %s with a stack trace, evaluated after %s loggable check.", val1, level)
);
Надеется, что это помогает некоторым из вас, кто также хочет использовать встроенную в лесозаготовительной :-)
Приветствие Бен
Рассмотрим Log4J HTTP://logging.apache.org/log4j/2.x/ – Mirco
@ verbose-mode Почему? java util logging делает все, что требуется и является более простым в использовании. Насколько я понимаю, ваше предложение нарушает принцип KISS (Keep the Simple S ...). – Martin