一、java日誌記錄錯誤的文件、方法、行號、報錯信息
StackTraceElement s= e.getStackTrace()[0];
1.一、記錄保存的文件s.getFileName()
1.二、記錄保存的方法s.getMethodName()
1.三、記錄報錯的行號 s.getLineNumber()
1.四、記錄報錯的信息(不全面) e.getMessage()
1.五、互利報錯的類名字 e.getClassName()
1.六、打印詳細的堆棧信息 logger.error("錯誤堆棧", e);
獲取堆棧信息,若是直接打印e,則會將它toStringjava
/** * 獲取堆棧信息 * @param throwable * @return */ public static String getStackTrace(Throwable throwable){ StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); try { throwable.printStackTrace(pw); return sw.toString(); } finally { pw.close(); } }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @Desc: 異常打印日誌 ,提供給打印非正常異常 * @Author HealerJean * @Date 2018/8/21 下午6:41. */ public static void log(Throwable e,Class c){ Logger logger = LoggerFactory.getLogger(c); // logger.error("錯誤堆棧", e); StackTraceElement s= e.getStackTrace()[0];//數組長度爲 1 logger.error("\n\n-----------------"+ "\n報錯文件名:"+s.getFileName()+ "\n報錯的類:"+s.getClassName()+ "\n報錯方法::"+s.getMethodName()+ "\n報錯的行:"+ s.getLineNumber()+ "\n報錯的message:"+ e.getMessage()+ "\n錯誤堆棧:\n"+getStackTrace(e)+ "\n------------------\n\n"); }
1.2 、使用
public static void main(String[] args) { try { int i =1/0 ; }catch (Exception e){ log(e,ExceptionLogUtils.class ); } } 11:40:53.732 [main] ERROR com.duodian.youhui.admin.utils.ExceptionLogUtils - ----------------- 報錯文件名:ExceptionLogUtils.java 報錯的類:com.duodian.youhui.admin.utils.ExceptionLogUtils 報錯方法::main 報錯的行:68 報錯的message:/ by zero 錯誤堆棧: java.lang.ArithmeticException: / by zero at com.duodian.youhui.admin.utils.ExceptionLogUtils.main(ExceptionLogUtils.java:68) ------------------
二、打印變量日誌
log.info("cacheMsg RECUR_FIGHT A: roomId = {}, userId = {}, toUid = {}", room.getRoomId(), ctx.getUserId(), toUid);
三、info打印更多的信息
3.一、打印方法
public static void logInfo(String msg,Class c){ Logger logger = LoggerFactory.getLogger(c); String location=""; StackTraceElement[] stacks = Thread.currentThread().getStackTrace(); System.out.println(stacks.length); //長度爲3 for(StackTraceElement stackTraceElement:stacks){ logger.info("\n\n**************"+ "\n打印文件名:"+stackTraceElement.getFileName() + "\n打印類名:"+ stackTraceElement.getClassName() + "\n方法名:" + stackTraceElement.getMethodName() + "\n行號:" + stackTraceElement.getLineNumber() + "\n打印內容:"+msg+ "\n**************\n\n"); System.out.println(location); } }
3.二、測試
一、是當前線程,二、當前打印所在方法,三、是調用該方法的類,那麼咱們須要的就是第三個數組
public static void main(String[] args) { logInfo("HealerJean",ExceptionLogUtils.class); } 3 11:44:47.685 [main] INFO com.duodian.youhui.admin.utils.ExceptionLogUtils - ************** 打印文件名:Thread.java 打印類名:java.lang.Thread 方法名:getStackTrace 行號:1559 打印內容:HealerJean ************** 11:44:47.689 [main] INFO com.duodian.youhui.admin.utils.ExceptionLogUtils - ************** 打印文件名:ExceptionLogUtils.java 打印類名:com.duodian.youhui.admin.utils.ExceptionLogUtils 方法名:logInfo 行號:31 打印內容:HealerJean ************** 11:44:47.689 [main] INFO com.duodian.youhui.admin.utils.ExceptionLogUtils - ************** 打印文件名:ExceptionLogUtils.java 打印類名:com.duodian.youhui.admin.utils.ExceptionLogUtils 方法名:main 行號:49 打印內容:HealerJean **************
1和3總結
package com.duodian.youhui.admin.utils; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.PrintWriter; import java.io.StringWriter; /** * @Desc: 異常打印日誌 ,提供給打印非正常異常 * @Author HealerJean * @Date 2018/8/21 下午6:41. */ @Slf4j public class ExceptionLogUtils { public static void log(Throwable e,Class c){ Logger logger = LoggerFactory.getLogger(c); // logger.error("錯誤堆棧", e); StackTraceElement s= e.getStackTrace()[0];//數組長度爲 1 logger.error("\n\n-----------------"+ "\n報錯文件名:"+s.getFileName()+ "\n報錯的類:"+s.getClassName()+ "\n報錯方法::"+s.getMethodName()+ "\n報錯的行:"+ s.getLineNumber()+ "\n報錯的message:"+ e.getMessage()+ "\n錯誤堆棧:\n"+getStackTrace(e)+ "\n------------------\n\n"); } /** * 獲取堆棧信息 * @param throwable * @return */ public static String getStackTrace(Throwable throwable){ StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); try { throwable.printStackTrace(pw); return sw.toString(); } finally { pw.close(); } } public static void logInfo(String msg,Class c){ Logger logger = LoggerFactory.getLogger(c); StackTraceElement[] stacks = Thread.currentThread().getStackTrace();//數組長度爲 3 logger.info("\n\n**************"+ "\n打印文件名:"+stacks[2].getFileName() + "\n打印類名:"+ stacks[2].getClassName() + "\n方法名:" + stacks[2].getMethodName() + "\n行號:" + stacks[2].getLineNumber() + "\n打印內容:"+msg+ "\n**************\n\n"); } }
四、打印變量
log.info("admin[{}],[{}],[{}];請求地址:[{}];訪問ip:[{}]", CasConfig.RemoteUserUtil.getRemoteUserId(),CasConfig.RemoteUserUtil.getRemoteUserAccount(),CasConfig.RemoteUserUtil.getRemoteUserName(),request.getRequestURL(), IpUtil.getIp());
若是滿意,請打賞博主任意金額,感興趣的在微信轉帳的時候,添加博主微信哦, 請下方留言吧。可與博主自由討論哦微信
支付包 | 微信 | 微信公衆號 |
---|---|---|
![]() |
![]() |
![]() |