场景:

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 表达式需要“对外提供”一个符合泛型类型的对象