[英]Java: use lambda expression in Handler.setFormatter
我在代碼(java.util.logging)中使用了Logger,我創建了一個Handler以添加到記錄器中。我想在此Handler上設置Formatter,我可以使用匿名內部類來做到這一點,但我想替換該類帶有lambda表達式。 我不知道該怎么做。 有什么建議么?
工作代碼:
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())
);
您可以使用適配器方法將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())
));
如果這是唯一的地方,它不會提供任何優勢,但是,如果要在代碼中的許多地方創建格式化程序,而更喜歡使用lambda進行定義,那是值得的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.