package com.lill.test.utils;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
public class LogUtils {
private static int originStackIndex = 2;
/**
* 获取当前文件名称
* @return
*/
public static String getFileName() {
return Thread.currentThread().getStackTrace()[originStackIndex].getFileName();
}
/**
* 获取当前类名称
* @return
*/
public static String getClassName() {
return Thread.currentThread().getStackTrace()[originStackIndex].getClassName();
}
/**
* 获取当前方法名称
* @return
*/
public static String getMethodName() {
return Thread.currentThread().getStackTrace()[originStackIndex].getMethodName();
}
/**
* 获取当前代码行号
* @return
*/
public static int getLineNumber() {
return Thread.currentThread().getStackTrace()[originStackIndex].getLineNumber();
}
/**
* 打印文本信息
* @param logger
* @param message
* @param remark
*/
public static void writeLogger(Logger logger, String message, String remark){
StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
writeLogger(logger, ste.getLineNumber(), ste.getMethodName(), remark, message);
}
/**
* 打印实体信息
* @param logger
* @param obj
* @param remark
*/
public static void writeLogger(Logger logger, Object obj, String remark){
String message = JSON.toJSONString(obj);
StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
writeLogger(logger, ste.getLineNumber(), ste.getMethodName(), remark, message);
}
/**
* 打印异常信息
* @param logger
* @param remark
* @param e
*/
public static void writeException(Logger logger, String remark, Throwable e){
StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
writeException(logger, ste.getLineNumber(), ste.getMethodName(), remark, e);
}
/**
* 打印文本信息
* @param logger
* @param message
* @param remark
*/
public static void writeErrorLogger(Logger logger, String message, String remark){
StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
writeErrorLogger(logger, ste.getLineNumber(), ste.getMethodName(), remark, message);
}
/**
* 打印实体信息
* @param logger
* @param obj
* @param remark
*/
public static void writeErrorLogger(Logger logger, Object obj, String remark){
String message = JSON.toJSONString(obj);
StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
writeErrorLogger(logger, ste.getLineNumber(), ste.getMethodName(), remark, message);
}
/**
* 打印异常信息
* @param logger
* @param remark
* @param e
*/
public static void writeErrorException(Logger logger, String remark, Throwable e){
StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
writeErrorException(logger, ste.getLineNumber(), ste.getMethodName(), remark, e);
}
private static void writeLogger(Logger logger, int number, String methodName, String remark, String message){
logger.info(message(number, methodName, remark) + message);
}
private static void writeErrorLogger(Logger logger, int number, String methodName, String remark, String message){
logger.error(message(number, methodName, remark) + message);
}
private static void writeWarnLogger(Logger logger, int number, String methodName, String remark, String message){
logger.warn(message(number, methodName, remark) + message);
}
private static void writeDebugLogger(Logger logger, int number, String methodName, String remark, String message){
logger.debug(message(number, methodName, remark) + message);
}
private static void writeException(Logger logger, int number, String methodName, String remark, Throwable e){
logger.info(message(number, methodName, remark), e);
}
private static void writeErrorException(Logger logger, int number, String methodName, String remark, Throwable e){
logger.error(message(number, methodName, remark), e);
}
private static void writeWarnException(Logger logger, int number, String methodName, String remark, Throwable e){
logger.warn(message(number, methodName, remark), e);
}
private static void writeDebugException(Logger logger, int number, String methodName, String remark, Throwable e){
logger.debug(message(number, methodName, remark), e);
}
private static String message(int number, String methodName, String remark){
return "【第"+ number +"行】【"+ methodName +"】【"+ remark+"】";
}
}
实际运用
package com.lill.test.filter;
import com.lill.test.LogUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
/**
* 全局异常处理中心
*/
@ControllerAdvice
public class GlobalDefaultExceptionHandler{
private Logger logger = LoggerFactory.getLogger(GlobalDefaultExceptionHandler.class);
@ExceptionHandler(Exception.class)
@ResponseBody
public JsonResult exceptionHandler(HttpServletRequest request, Exception e){
LogUtils.writeErrorLogger(logger, e.getStackTrace(), e.getLocalizedMessage());
}
}
日志输入
2019-08-13 14:37:37.475 [http-nio-8181-exec-1] ERROR com.lill.test.filter.GlobalDefaultExceptionHandler - 【第26行】【exceptionHandler】【Request method 'GET' not supported】[{……}]
代码封装的比较简单,也很初级,不过还是希望对大家有所帮助,我在实际开发项目中,用它定位异常信息、打印关键节点日志还是非常便利的