我在我的代码中使用了一个记录器(java.util.logging),我创建了一个处理程序来添加到记录器中,我想在这个处理程序上设置格式化程序,我可以用一个匿名的内部类来做这件事,但我想用一个λ表达式替换那个类。我不知道该怎么做。有什么建议吗?
工作代码:
public static Logger logger = Logger.getLogger("KYCReviewSchedule");
Handler INFOHandler = new FileHandler(OUTPUTDIR + "INFO_logger.txt",true);
INFOConsoleHandler.setFormatter(new SimpleFormatter() {
private static final String format = "[%1$tF %1$tT] [%2$-7s] %3$s %n";
public String format(LogRecord lr) {
return String.format(format,new Date(lr.getMillis()),
lr.getLevel().getLocalizedName(),lr.getMessage())
}
});我想用lambda表达式替换最后一个语句,如下所示:
INFOConsoleHandler.setFormatter(
(lr)-> String.format("[%1$tF %1$tT] [%2$-7s] %3$s %n",
lr.millis(),lr.getSourceMethodName(), lr.getLoggerName() ,
lr.getLevel(), lr.getMessage() , lr.getThrown())
);发布于 2018-02-24 18:47:28
您可以使用适配器方法将lambda转换为SimpleFormatter,但您需要一个函数接口:
import java.util.logging.LogRecord;
@FunctionalInterface
public interface LogFormatter {
public String format(LogRecord lr);
}适配器方法将如下所示:
public static SimpleFormatter simpleFormat(LogFormatter formatter) {
return new SimpleFormatter() {
public String format(LogRecord lr) {
return formatter.format(lr);
}
};
}然后您可以像这样调用它:
INFOConsoleHandler.setFormatter(simpleFormat(
lr -> String.format("[%1$tF %1$tT] [%2$-7s] %3$s %n",
lr.millis(), lr.getSourceMethodName(), lr.getLoggerName(),
lr.getLevel(), lr.getMessage() , lr.getThrown())
));如果这是唯一的地方,它不会提供任何优势,但如果您在代码中的许多地方创建格式化程序,并且更喜欢使用lambdas定义它们,那么它可能是值得的。
https://stackoverflow.com/questions/48961636
复制相似问题