package com.pt.platform.core.common;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class JYLoggerUtil
{
private static final Logger log = LoggerFactory.getLogger(JYLoggerUtil.class); private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static ThreadLocal<Map<String, Date>> threadMap = new ThreadLocal(); public static <T> void info(Class<T> clazz, String message)
{
Logger logger = LoggerFactory.getLogger(clazz);
logger.info(message);
} public static <T> void info(Class<T> clazz, String message, Throwable t) {
Logger logger = LoggerFactory.getLogger(clazz);
logger.info(message, t);
} public static <T> void debug(Class<T> clazz, String message) {
Logger logger = LoggerFactory.getLogger(clazz);
logger.debug(message);
} public static <T> void error(Class<T> clazz, String message)
{
Logger logger = LoggerFactory.getLogger(clazz);
logger.error(message);
} public static <T> void error(Class<T> clazz, String message, Exception ex) {
Logger logger = LoggerFactory.getLogger(clazz);
logger.error(message, ex);
} public static <T> void logCurrentTime(String key, boolean isStart, Class<T> cls)
{
if (!log.isInfoEnabled()) return; Map timeMap = (Map)threadMap.get();
if (timeMap == null) {
timeMap = new HashMap();
threadMap.set(timeMap);
} String mapKey = cls.getName() + ":" + key;
Date curDate = new Date();
if (isStart) {
timeMap.put(mapKey, curDate);
} else {
Date lastDate = (Date)timeMap.get(mapKey);
if (lastDate != null) {
timeMap.remove(mapKey);
StringBuilder logInfo = new StringBuilder("========="); logInfo.append(",(位置:").append(cls.getName());
logInfo.append(",内容:").append(key).append(")");
logInfo.append(",间隔:").append(curDate.getTime() - lastDate.getTime());
logInfo.append(",开始start:").append(sdf.format(lastDate));
logInfo.append(",结束end:").append(sdf.format(curDate)).append("========="); log.info(logInfo.toString());
threadMap.remove();
}
}
}
}

log工具类的更多相关文章

  1. Android开发中有用工具之--Log工具类

    在开发的过程中.我们常常会使用Log来输出日志,帮助我们来调试程序 可是有时候并不能全然满足我们的须要 ,比方我想知道这个日志信息是来自于哪一个包 哪一个类 所以我们封装一个这个Log类.方便我们的使 ...

  2. Android util.Log 工具类

    Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我们打印日志. Log.v().用于打印那些最为琐碎的.意义最小的日志信息.对应级别verbos ...

  3. 封装Log工具类

    public class LogUtil { public static final int VERBOSE = 1; public static final int DEBUG = 2; publi ...

  4. Android Log工具类

    import java.text.SimpleDateFormat; import java.util.Date; import android.util.Log; public class LogU ...

  5. 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类

    快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...

  6. Android常见工具类封装

    MD5加密 import android.annotation.SuppressLint; import java.security.MessageDigest; public class MD5 { ...

  7. android的Log日志打印管理工具类(一)

    android的Log日志的打印管理工具类: package com.gzcivil.utils; import android.util.Log; /** * 日志打印管理 * * @author ...

  8. Log 日志工具类 保存到文件 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. Android开发之封装log打印日志的工具类,实用logutils详细代码

    public final class LogUtil { /** all Log print on-off */ private final static boolean all = true; /* ...

随机推荐

  1. 关于java方法重写

    1.子类的方法与父类中的方法有相同的返回类型,相同的方法名称.相同的参数列表 2.子类方法的访问级别不能低于父类方法的访问级别 3.子类方法抛出的异常范围不能大于父类中方法抛出的异常范围

  2. [剑指 Offer 18. 删除链表的节点]

    [剑指 Offer 18. 删除链表的节点] 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head ...

  3. 第十章节 BJROBOT PID 动态调节【ROS全开源阿克曼转向智能网联无人驾驶车】

    1.把小车架空,平放在地板上,注意四个轮子一定要悬空.用资料里的虚拟机,打开一个终端 ssh 过去主控端启动 roslaunch znjrobot bringup.launch.   2.在虚拟机端再 ...

  4. Ubuntu和UOS+mips64l龙芯处理器安装编译Openssl

    1.下载openssl开发包文件,我这里下载的是openssl-1.1.1f.tar.gz:并放在/data/home/dengchaoqun/openssl1.1.1目录下 2.终端切换到当前目录下 ...

  5. linux 笔记的注意事项

    声明:本人Linux的笔记是根据<鸟哥私房菜>而写的 command [-option] parameter1 parameter2 ... command 是命令的名称: [ ]中括号是 ...

  6. JavaScript AMD模块化规范

    浏览器环境 有了服务器端模块以后,很自然地,大家就想要客户端模块.而且最好两者能够兼容,一个模块不用修改,在服务器和浏览器都可以运行. 但是,由于一个重大的局限,使得CommonJS规范不适用于浏览器 ...

  7. Vue2+Koa2+Typescript前后端框架教程--05Sequelize的使用(ORM)

    本篇开始分享Node.js后端服务开发中对于数据结构ORM的实现,主要使用的技术栈是:Sequelize. 上一篇文章中讲到班级管理的数据结构:ID,班级名称,班级编码,班主任ID,使用的数据库是My ...

  8. GitHub基础使用指南

    引言: 只要进行了一段时间的软件或者编程相关知识的学习,相信大家或多或少都会见过这只"猫猫",这可不是什么宠物店铺的商标,身为即将成为程序猿/媛的你,或者已经是一位程序猿/媛的你, ...

  9. Head First 设计模式 - 01. 策略 (Strategy) 模式

    当涉及到"维护"时,为了"复用"目的而使用继承,结局并不完美 P4 对父类代码进行修改时,影响层面可能会很大 思考题 利用继承来提供 Duck 的行为,这会导致 ...

  10. 卷积神经网络学习笔记——Siamese networks(孪生神经网络)

    完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 在整理这些知识点之前,我 ...