zoukankan      html  css  js  c++  java
  • 打印日志优化

    一、示例代码

    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)
            }
        }
  • 相关阅读:
    Arr
    class4
    class3联大网页
    class33
    class3
    人机交换 NO 1书签
    大数据的框架与特点
    mapreduce排序
    mapreduce求平均数
    mapreduce去重
  • 原文地址:https://www.cnblogs.com/june0816/p/14246024.html
Copyright © 2011-2022 走看看