• 打印日志优化


    一、示例代码

    public static void main(String[] args) {
            ProvinceCityInfo provinceCityInfo = new ProvinceCityInfo();
            provinceCityInfo.setCityId(1);
            provinceCityInfo.setCityName("北京");
    
            log.info("provinceCityInfo is {}", JSON.toJSONString(provinceCityInfo));
    
            if (log.isInfoEnabled()) {
                log.info("provinceCityInfo is {}", JSON.toJSONString(provinceCityInfo));
            }
    
            log.info("provinceCityInfo is {}" + JSON.toJSONString(provinceCityInfo));
        }

    二、log.isInfoEnabled()

    1. log.info("provinceCityInfo is {}", JSON.toJSONString(provinceCityInfo)); 编译后其实是两行代码,先把对象序列化为JSON字符串,再打印

    2. 如果不加log.isInfoEnabled(),即使把日志级别跳到了WARN,不打印info,也会序列化对象为JSON字符串

    3. 加上了log.isInfoEnabled(),只是做了一次判断,比序列化性能高

    三、log.info拼接字符串后再打印和使用占位符的区别

    1. 拼接字符串底层使用了StringBuilder,然后使用log.info(String s)打印

    2. 直接使用占位符,使用log.info(String format, Object o)打印

    3. 至少在代码层面,拼接字符串更耗费性能

    四、log.error()重载方法的选择

    1. error(String msg)只打印了错误信息,不打印堆栈信息

    2. error(String var1, Throwable var2),会打印堆栈信息

    public static void main(String[] args) {
            try {
                Integer a = 2 / 0;
            } catch (Exception ex) {
                log.error("1.error:" + ex.getMessage()); // 1.error:/ by zero
                log.error("2.error:" + ex); // 2.error:java.lang.ArithmeticException: / by zero
                log.error("3.error", ex);
                // 3.error
                //  java.lang.ArithmeticException: / by zero
                //    at com.a.b.TestLog.main(TestLog.java:13)
            }
        }
  • 相关阅读:
    2.12 使用@DataProvider
    2.11 webdriver中使用 FileUtils ()
    Xcode8 添加PCH文件
    The app icon set "AppIcon" has an unassigned child告警
    Launch Image
    iOS App图标和启动画面尺寸
    iPhone屏幕尺寸、分辨率及适配
    Xcode下载失败 使用已购项目页面再试一次
    could not find developer disk image
    NSDate与 NSString 、long long类型的相互转化
  • 原文地址:https://www.cnblogs.com/june0816/p/14246024.html
Copyright © 2020-2023  润新知