1、在java日志中记录错误的文件、方法、行号、错误信息
sacktraceelements=e.getstack trace () [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
*/
publicstaticstringgetstacktrace (可伸缩可伸缩) {
StringWriter sw=new StringWriter (;
打印机pw=new打印机(SW;
特里
{
throwable.print堆栈跟踪(pw;
return sw.toString (;
(} finally
{
pw.close (;
}
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//*
* @Desc:异常打印日志,打印异常提供
* @Author HealerJean
* @Date 2018/8/21下午6:41。
*/
publicstaticvoidlog (可移植e,类c ) {
logger logger=logger factory.getlogger (c;
//logger.error ('错误堆栈',e );
sacktraceelements=e.getstack trace () [0]; //数组的长度为1
logger.error ((n (n---------- ) )。
'n错误文件名:' s.getFileName () ) ) ) ) ) ) ) ) )。
'n报告错误的类: ' s.getClassName () )。
'n错误报告方法:' s.getMethodName ()
'n报告错误的行: ' s.getLineNumber ()
'n报告错误的消息: ' e.getmessage () )。
'n错误堆栈:n '获取堆栈跟踪(e )
() n--------(n ) );
}
1.2、使用
publicstaticvoidmain (字符串[ ] args ) {
try {
int i=1/0;
}catch(exceptione ) {
log(e,ExceptionLogUtils.class;
}
}
1:40336053.732 [主] error com.duo Dian.you hui.admin.utils.exception logutils -
----------------- -
错误文件名:ExceptionLogUtils.java
报告错误类: com.duo Dian.you hui.admin.utils.exception logutils
如何报告错误:main
错误的行: 68
错误的消息:/by zero
错误堆栈:
Java.lang.arithmetic exception :/by zero
atcom.duo Dian.you hui.admin.utils.exception logutils.main (exception logutils.Java :68 )。
-------------------
2、打印变量日志
log.info (cachemsgrecur _ fighta : roomid={ },userId={},toUid={} ',room.getRoomId ),ctx.getUserId )
3、info打印更多信息
3.1、印刷方法
publicstaticvoidloginfo (字符串msg,类c ) {
日志程序日志
er = LoggerFactory.getLogger(c);String location="";
StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
System.out.println(stacks.length); //长度为3
for(StackTraceElement stackTraceElement:stacks){
logger.info("nn**************"+
"n打印文件名:"+stackTraceElement.getFileName() +
"n打印类名:"+ stackTraceElement.getClassName() +
"n方法名:" + stackTraceElement.getMethodName() +
"n行号:" + stackTraceElement.getLineNumber() +
"n打印内容:"+msg+
"n**************nn");
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("nn-----------------"+
"n报错文件名:"+s.getFileName()+
"n报错的类:"+s.getClassName()+
"n报错方法::"+s.getMethodName()+
"n报错的行:"+ s.getLineNumber()+
"n报错的message:"+ e.getMessage()+
"n错误堆栈:n"+getStackTrace(e)+
"n------------------nn");
}
/**
* 获取堆栈信息
* @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("nn**************"+
"n打印文件名:"+stacks[2].getFileName() +
"n打印类名:"+ stacks[2].getClassName() +
"n方法名:" + stacks[2].getMethodName() +
"n行号:" + stacks[2].getLineNumber() +
"n打印内容:"+msg+
"n**************nn");
}
}
4、打印变量
log.info("admin[{}],[{}],[{}];请求地址:[{}];访问ip:[{}]", CasConfig.RemoteUserUtil.getRemoteUserId(),CasConfig.RemoteUserUtil.getRemoteUserAccount(),CasConfig.RemoteUserUtil.getRemoteUserName(),request.getRequestURL(), IpUtil.getIp());
如果满意,请打赏博主任意金额,感兴趣的在微信转账的时候,添加博主微信哦, 请下方留言吧。可与博主自由讨论哦
支付包
微信
微信公众号