Когда я вызываю java.util.logging.Logger.log(Level, String)
из лямбда, метод java.util.logging.LogRecord.getSourceMethodName()
возвращает lambda $ 0 на моем Formatter
.
Например:
public void doStuff() {
List<String> names = new ArrayList<>();
names.add("John");
names.add("Paul");
names.add("George");
names.add("Ringo");
names.forEach((beatle) -> Logger.getLogger("myLog").log(Level.SEVERE, beatle));
}
Как я могу получить имя метода (DoStuff) вместо 'лямбда $ 0'?
PS: Я бы не хотел его получать из StackTrace.
Вместо 'GetClass() GetName()', что лучше использовать 'SuroundingClass.class.. getName() ', поскольку фактический тип' this', возвращаемый 'getClass()', не обязательно является классом, содержащим фактическую реализацию 'doStuff()'. Кроме того, выражение лямбда не должно захватывать «это». – Holger
@ Хольгер Я согласен, и лично я всегда так делаю. Но OP не включал имя класса, и я хотел, чтобы ответ был прост. – VGR
@ VGR Я также подумал об этом обходном пути, но это может быть проблемой в случае переименования метода. Не забудьте также обновить строку. – hbelmiro