java日誌記錄錯誤的文件_方法_行號_報錯信息

一、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());





若是滿意,請打賞博主任意金額,感興趣的在微信轉帳的時候,添加博主微信哦, 請下方留言吧。可與博主自由討論哦微信

支付包 微信 微信公衆號
支付寶 微信 微信公衆號
相關文章
相關標籤/搜索