场景:
String os="macOS"; // 不推荐,在不符合该日志级别范围内字符串拼接操作还会执行会影响性能 logger.debug(" 系统 "+os); // 改写成 {} 占位符的懒求值方式,建议此操作 logger.debug(" 系统 {}", os);
遇到如下情况又是一次拼接或者是调用一个方法该咋办呢
logger.debug(" 系统 {}", " 平台:"+os); logger.debug(" 系统 {}", toJson(os));
在之前介绍 lamada 的帖子里(Lamada 学习小记 )用 Lambda 延迟加载来避免日志 log 的字符拼接。借助万能的 lamada 吧!
logger.debug(" 系统 {}", () -> (" 平台:"+os)); logger.debug(" 系统 {}", () -> toJson(os));
把它还原成匿名内部类的形式会发现
logger.info(" 系统 {}", new Supplier<Object>() { @Override public Object get() { return (" 平台:" + os); } });
其中 <T> 接口仅包含一个无参的方法: T get() 。用来获取一个泛型参数指定类型的对 象数据。由于这是一个函数式接口,这也就意味着对应的 Lambda 表达式需要“对外提供”一个符合泛型类型的对象