设为首页 收藏本站
查看: 1227|回复: 0

[经验分享] JAVA日志工具类

[复制链接]
累计签到:224 天
连续签到:4 天
发表于 2019-11-29 09:45:07 | 显示全部楼层 |阅读模式
      日志,应该是一个项目中比较重要的一部分,项目出问题了,第一时间排查就要看日志,除了日常将日志记录到文件中,还需要便于精确查找问题。我以前很少用日志,比较麻烦,一般就在异常处记录下日志,但是如果项目不出问题咋办,又需要看项目的某个功能的具体流程,其中使用的方法和参数返回值等信息这些需要知道咋整。这里我自己整理了一个工具使用方便,功能强大。废话少说,上代码。
public class LogUtil {
       
        private static String[] types= {"java.lang.Interger","java.lang.Double","java.lang.Float","java.lang.Long",
                        "java.lang.Short","java.lang.Byte","java.lang.Boolean","java.lang.Char","java.lang.String",
                        "java.lang.int","java.lang.double","java.lang.long","java.lang.short","java.lang.byte",
                        "java.lang.boolean","java.lang.char","java.lang.float"};
       
        public static Logger log = Logger.getLogger(LogUtil.class);
       
        /**
         * @Title
         * @author ex_kjkfzx_xiaoyh
         * @param
         * @description 输出打印日志的内容
         * @date 2019年8月1日 上午10:35:02
         * @param stackTraceElement
         * @return
         * @throw
         */
        private static String getLogInfo(StackTraceElement stackTraceElement,Object...object) {
                StringBuilder loginfoStringBuilder = new StringBuilder();
                String threadName = Thread.currentThread().getName();
                long thradId = Thread.currentThread().getId();
                String fileName = stackTraceElement.getFileName();
                String className = stackTraceElement.getClassName();
                String meyhodName = stackTraceElement.getMethodName();
                int LineNumber = stackTraceElement.getLineNumber();
               
                loginfoStringBuilder.append("[");
                loginfoStringBuilder.append("threadId="+thradId).append(";");
                loginfoStringBuilder.append("threadName="+threadName).append(";");
                loginfoStringBuilder.append("fileName="+fileName).append(";");
                loginfoStringBuilder.append("className="+className).append(";");
                loginfoStringBuilder.append("methodName="+meyhodName).append(";");
                if(object.length >= 1) {
                        loginfoStringBuilder.append("paramter=");
                        for(Object obj : object) {
                                loginfoStringBuilder.append(getParamterValue(obj)).append(" ");
                        }
                        loginfoStringBuilder.append(";");
                }
                loginfoStringBuilder.append("LineNumber="+LineNumber);
                loginfoStringBuilder.append("]");
                return loginfoStringBuilder.toString();
        }
       
        /**
         * @Title
         * @author ex_kjkfzx_xiaoyh
         * @param
         * @description 显示简易信息
         * @date 2019年8月5日 下午3:04:42
         * @param stackTraceElement
         * @param message
         * @return
         * @throw
         */
        private static String getLogInfoSimple(StackTraceElement stackTraceElement,String message) {
                StringBuilder loginfoStringBuilder = new StringBuilder();
                String className = stackTraceElement.getClassName();
                String meyhodName = stackTraceElement.getMethodName();
                int LineNumber = stackTraceElement.getLineNumber();
               
                loginfoStringBuilder.append("[");
                loginfoStringBuilder.append("className="+className).append(";");
                loginfoStringBuilder.append("methodName="+meyhodName).append(";");
                loginfoStringBuilder.append("paramter="+message).append(";");
                loginfoStringBuilder.append("LineNumber="+LineNumber);
                loginfoStringBuilder.append("]");
                return loginfoStringBuilder.toString();
        }
       
       
       
        /**
         * @Title
         * @author ex_kjkfzx_xiaoyh
         * @param
         * @description 打印参数和参数值
         * @date 2019年8月1日 下午3:55:13
         * @param obj
         * @return
         * @throw
         */
        private static String getParamterValue(Object obj) {
                StringBuilder builder = new StringBuilder();
               
                if(obj!=null) {
                        String name = obj.getClass().getName();
                        int i = 0;
                        //常用的类型打印数据值
                        for(String type : types) {
                                if(name.equals(type)) {
                                        String value = String.valueOf(obj);
                                        builder.append(name+":"+value);
                                        i++;
                                }
                        }
                        //其他类型如果重写了toString方法会打印值,没有重写会打印地址
                        if(i==0) {
                                builder.append(name+":"+obj.toString());
                        }
                }else {
                        builder.append("参数为空");
                }
                return builder.toString();
        }
       
        /**
         * @Title
         * @author ex_kjkfzx_xiaoyh
         * @param
         * @description 打印详细信息
         * @date 2019年8月5日 下午3:31:42
         * @param obj
         * @throw
         */
        public static void info(Object...obj) {
                try {
                        StackTraceElement[] stackTraceElement = Thread.currentThread().getStackTrace();
                        log.info(getLogInfo(stackTraceElement[2],obj));
                }catch(Exception e) {
                        e.printStackTrace();
                }
        }
       
       
        /**
         * @Title
         * @author ex_kjkfzx_xiaoyh
         * @param
         * @description 只打印部分信息
         * @date 2019年8月5日 下午3:29:12
         * @param message
         * @throw
         */
        public static void info(String message) {
                StackTraceElement[] stackTraceElement = Thread.currentThread().getStackTrace();
                log.info(getLogInfoSimple(stackTraceElement[2],message));
        }
       
        public static void error(Object obj) {
                try {
                        StackTraceElement[] stackTraceElement = Thread.currentThread().getStackTrace();
                        log.error(getLogInfo(stackTraceElement[2],obj));
                }catch(Exception e) {
                        e.printStackTrace();
                }
        }       
       
        public static void debug(Object obj) {
                try {
                        StackTraceElement[] stackTraceElement = Thread.currentThread().getStackTrace();
                        log.debug(getLogInfo(stackTraceElement[2],obj));
                }catch(Exception e) {
                        e.printStackTrace();
                }
        }
               
}
这里没有到特别复杂的东西,都是些基本操作,因为我们项目的实体大都是使用lombok这个包,他会重写tostring方法,因此实体的属性名称和值都会打印。另外我自己电脑用反射写的,获取属性值比这个稍微麻烦些,丢到csdn上了。
这里说下这个logutil的强大地方
(1)不需要每次创建日志工厂,这里是工具类可以直接使用。
(2)不限制参数个数,普通的日志你想同时打印几个参数就要调用多次,很麻烦,这里直接有结果参数就输入几个参数。
(3)精确定位,虽然普通的日志也可以定位到行级别,但是我这个可以定位到类,方法,行,不好意思更强。
(4)友好,因为是工具类支持修改,可以自定义拓展功能和修改。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-989052-1-1.html 上篇帖子: 从无到有构建大型电商微服务架构(第一阶段含源码)[MP4] 下篇帖子: jdk8新特性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表