java exception 行号_java日志记录错误的文件_方法_行号_报错信息
1、java日志記錄錯誤的文件、方法、行號、報錯信息
StackTraceElement s= e.getStackTrace()[0];
1.1、記錄保存的文件s.getFileName()
1.2、記錄保存的方法s.getMethodName()
1.3、記錄報錯的行號 s.getLineNumber()
1.4、記錄報錯的信息(不全面) e.getMessage()
1.5、互利報錯的類名字 e.getClassName()
1.6、打印詳細的堆棧信息 logger.error("錯誤堆棧", e);
獲取堆棧信息,如果直接打印e,則會將它toString
/**
* 獲取堆棧信息
* @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)
------------------
2、打印變量日志
log.info("cacheMsg RECUR_FIGHT A: roomId = {}, userId = {}, toUid = {}", room.getRoomId(), ctx.getUserId(), toUid);
3、info打印更多的信息
3.1、打印方法
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.2、測試
1、是當前線程,2、當前打印所在方法,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");
}
}
4、打印變量
log.info("admin[{}],[{}],[{}];請求地址:[{}];訪問ip:[{}]", CasConfig.RemoteUserUtil.getRemoteUserId(),CasConfig.RemoteUserUtil.getRemoteUserAccount(),CasConfig.RemoteUserUtil.getRemoteUserName(),request.getRequestURL(), IpUtil.getIp());
如果滿意,請打賞博主任意金額,感興趣的在微信轉賬的時候,添加博主微信哦, 請下方留言吧。可與博主自由討論哦
支付包
微信
微信公眾號
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的java exception 行号_java日志记录错误的文件_方法_行号_报错信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java添加事件监听器_Java事件监听
- 下一篇: java socket 路由_JAVA简