package com.ibiz.util.log; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static com.ibiz.util.log.LogMessage.*; public class LoggerUtil { public static ThreadLocal<Long> startSet = new ThreadLocal<>(); /** * 打印日志:开始方法(业务调用) * * @param params 调用原方法入参 */ public static void startLog(Object... params) { String loggerName = getClassName(); Logger log = LoggerFactory.getLogger(loggerName); log.info(LogMessage.Function_Start, loggerName); log.debug(LogMessage.Params, getStr(params)); startSet.set(System.currentTimeMillis()); } /** * 打印日志:结束方法(业务调用) * * @param params 调用工具类的原方法返回值。 */ public static void endLog(Object... params) { Long start = startSet.get(); String loggerName = getClassName(); Logger log = LoggerFactory.getLogger(loggerName); log.info(Function_End, loggerName); log.debug(ReturnedValue, getStr(params)); if (start != null) { startSet.remove(); log.debug(TimeCost, System.currentTimeMillis() - start); } } public static void error(String msg) { LoggerFactory.getLogger(getClassName()).error(msg); } public static void error(String msg, Object... obj) { LoggerFactory.getLogger(getClassName()).error(msg, obj); } public static void warn(String msg) { LoggerFactory.getLogger(getClassName()).error(msg); } public static void warn(String msg, Object... obj) { LoggerFactory.getLogger(getClassName()).error(msg, obj); } public static void info(String msg) { LoggerFactory.getLogger(getClassName()).info(msg); } public static void info(String msg, Object... obj) { LoggerFactory.getLogger(getClassName()).info(msg, obj); } public static void debug(String msg) { LoggerFactory.getLogger(getClassName()).debug(msg); } public static void debug(String msg, Object... obj) { LoggerFactory.getLogger(getClassName()).debug(msg, obj); } /** * 获取调用 LoggerUtil工具静态类的类名 * * @return 长类名.方法名(行数) * ps: 获取【行数】影响性能,生产环境中不建议打印行数。 */ private static String getClassName() { StackTraceElement element = Thread.currentThread().getStackTrace()[3]; //从程序栈中获取定位信息 String className = element.getClassName(); String methodName = element.getMethodName(); int lineNum = element.getLineNumber(); // return className + "." + methodName; return String.format("%s.%s(%s)",className ,methodName,lineNum); } }