java日志记录错误的文件_方法_行号_报错信息

                <svg xmlns="http://www.w3.org/2000/svg" style="display: none">
                    <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0)"></path>
                </svg>
                                        <h2><a id="1java_1"></a>1、java日志记录错误的文件、方法、行号、报错信息<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h2>
 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) {
    <span class="hljs-keyword">try</span> {
        <span class="hljs-built_in">int</span> i =<span class="hljs-number">1</span>/<span class="hljs-number">0</span> ;
    }<span class="hljs-keyword">catch</span> (Exception e){
        log(e,ExceptionLogUtils.<span class="hljs-keyword">class</span> );
    }


}

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()[<span class="hljs-number">0</span>];<span class="hljs-comment">//数组长度为 1</span>
     logger.error(<span class="hljs-string">"\n\n-----------------"</span>+
                 <span class="hljs-string">"\n报错文件名:"</span>+s.getFileName()+
                 <span class="hljs-string">"\n报错的类:"</span>+s.getClassName()+
                 <span class="hljs-string">"\n报错方法::"</span>+s.getMethodName()+
                 <span class="hljs-string">"\n报错的行:"</span>+ s.getLineNumber()+
                 <span class="hljs-string">"\n报错的message:"</span>+ e.getMessage()+
                 <span class="hljs-string">"\n错误堆栈:\n"</span>+getStackTrace(e)+
                 <span class="hljs-string">"\n------------------\n\n"</span>);
    

    }

    /**

    • 获取堆栈信息
    • @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());


如果满意,请打赏博主任意金额,感兴趣的在微信转账的时候,添加博主微信哦, 请下方留言吧。可与博主自由讨论哦

支付包 微信 微信公众号
支付宝 微信 微信公众号