首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:在Handler.setFormatter中使用lambda表达式

Java:在Handler.setFormatter中使用lambda表达式
EN

Stack Overflow用户
提问于 2018-02-24 18:11:03
回答 1查看 108关注 0票数 0

我在我的代码中使用了一个记录器(java.util.logging),我创建了一个处理程序来添加到记录器中,我想在这个处理程序上设置格式化程序,我可以用一个匿名的内部类来做这件事,但我想用一个λ表达式替换那个类。我不知道该怎么做。有什么建议吗?

工作代码:

代码语言:javascript
复制
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表达式替换最后一个语句,如下所示:

代码语言:javascript
复制
 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())
);
EN

回答 1

Stack Overflow用户

发布于 2018-02-24 18:47:28

您可以使用适配器方法将lambda转换为SimpleFormatter,但您需要一个函数接口:

代码语言:javascript
复制
import java.util.logging.LogRecord;

@FunctionalInterface
public interface LogFormatter {
    public String format(LogRecord lr);
}

适配器方法将如下所示:

代码语言:javascript
复制
public static SimpleFormatter simpleFormat(LogFormatter formatter) {
    return new SimpleFormatter() {
        public String format(LogRecord lr) {
            return formatter.format(lr);
        }
    };
}

然后您可以像这样调用它:

代码语言:javascript
复制
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定义它们,那么它可能是值得的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48961636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档