Es ist ein ziemlich altes Thema, jedenfalls, meine zwei Cent, weil ich auch java.util.logging.Logger in meinen Projekten bevorzugen würde, wo ausreichend.
Lambdas machen diese Formatiererweiterung für mehrere benutzerdefinierte Parameter mehr oder weniger überflüssig, es sei denn, Sie profitieren von ihrer anwendungsweiten Wiederverwendung. In (meinen) einfachen Szenarien werden Protokollnachrichten auf den Codeabschnitt zugeschnitten, in den sie eingefügt werden. Daher ist String.format()
normalerweise viel einfacher und flexibler.
Vor Java 8 und lambdas war die Formatter
die einzige Möglichkeit, die Nachrichtenkonstruktion zu verschieben. Die einzige Alternative war, die Nachricht zu erstellen, um im Voraus zu loggen, bevor die loggable
Prüfung basierend auf dem Level stattfand.
Mit Java 8 lambdas kann die String-Formatierung nach der loggable
Prüfung verschoben werden, aber immer noch mit Zugriff auf den ursprünglichen Methodenkontext. Der einzige kleine Nachteil ist, dass alle Felder, auf die zugegriffen wird, aufgrund der Lambda-Einschränkungen endgültig sein müssen.
hier ein ziemlich einfaches Snippet:
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)
);
hoffe, das hilft einige von euch, die auch die Einbau-Protokollierung verwenden möchten :-)
Prost Ben
Betrachten Log4J http://logging.apache.org/log4j/2.x/ – Mirco
@ verbose-mode Warum? java util logging macht alles was benötigt wird und ist einfacher zu benutzen. Soweit ich es sehe, bricht Ihr Vorschlag das Prinzip KISS (Keep it Simple S ...). – Martin