日志如何打印异常堆栈信息。

package com.doctor.slf4j;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 如何打印异常堆栈信息。
 * @author doctor
 *
 * @time   2014年12月11日 上午9:49:00
 */
public class LogThrowableRule {
	private final Logger log = LoggerFactory.getLogger(getClass());

	/**
	 * 这种e.toString()方法只是得到异常信息,异常堆栈没有得到
	 */
	@Test
	public void test_wrongLogThrowable(){
		try {
			int test = 10/0;
		} catch (Exception e) {
			log.error("error" + e);
			//main  ERROR c.d.s.LogThrowableRule -
			//                         errorjava.lang.ArithmeticException: / by zero
		}
	}

	/**
	 * 得到异常堆栈信息正确的log方法
	 */
	@Test
	public void test_rightWayGetInfoForThrowable(){
		int a = 10;
		int b = 0;
		try {

			int test = a/b;
		} catch (Exception e) {
			log.error("error" ,e);
			//main  ERROR c.d.s.LogThrowableRule -
			//			error
			//java.lang.ArithmeticException: / by zero
			//          at com.doctor.slf4j.LogThrowableRule.test_rightWayGetInfoForThrowable(LogThrowableRule.java:35) ~[classes/:na]
			//          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_11]
			//          .............

			String msg = String.format("{error:'%s/%s'}", a,b);//string带参数,利用String.format
			log.error(msg, e);
		}
	}
}

时间: 2024-08-25 01:19:18

日志如何打印异常堆栈信息。的相关文章

slf4j如何打印java异常堆栈信息throwable对象

SLF4J 1.6.0 以前的版本,如果打印异常堆栈信息,必须用 log.error(String msg, Throwable t) log.info等对应方法. 如果msg含有变量,一般用String.format方法格式化msg. 如果用 error(String format, Object... arguments) 等其它方法,异常堆栈信息会丢失. 幸好,SLF4J 1.6.0以后的版本对这个不友好的异常信息log 改进了. error(String format, Object..

Java异常堆栈信息转String

平时使用e.getMessage()或e.printStackTrace(); 第一种报异常时要throw new RuntimeException("异常"),只能得到异常2字. 第二种e.printStackTrace();只是打印,不返回任何数据. 而服务器一般是集群或其他方式部署,查看日志的话太麻烦,可以吧堆栈信息转成String等类型,然后进行保存到数据库.放在页面隐藏域中方便查看. 介绍3种方法供选择: 方法一: package name.xu;public class C

异常堆栈信息输出工具类

public class MyExceptionUtils { /** * 输入异常的堆栈信息 * @param aThrowable * @return */ public static String getStackTrace(Throwable e) { final Writer result = new StringWriter(); final PrintWriter printWriter = new PrintWriter(result); e.printStackTrace(pr

SpringBoot-技术专区-详细打印启动时异常堆栈信息

SpringBoot在项目启动时如果遇到异常并不能友好的打印出具体的堆栈错误信息,我们只能查看到简单的错误消息,以致于并不能及时解决发生的问题,针对这个问题SpringBoot提供了故障分析仪的概念(failure-analyzer),内部根据不同类型的异常提供了一些实现,我们如果想自定义该怎么去做? FailureAnalyzer SpringBoot提供了启动异常分析接口FailureAnalyzer,该接口位于org.springframework.boot.diagnosticspack

02. 将异常堆栈信息,返回给前台,便于排查问题.

需求: 我们在排查线上可复现问题时,如果出现异常可能还需要登陆服务器去翻日志. 解决: java Code @RequestMapping("UserController/register") @ResponseBody public Map<Object, Object> register(String email, String userName, String password) { HashMap<Object, Object> result = Met

Java获取异常堆栈信息

public String getExceptionStack(Exception e){ StackTraceElement[] stackTraceElements = e.getStackTrace(); String prefix = "Exception in thread "+"\""+Thread.currentThread().getName()+"\" "; String result = prefix+e.

将异常堆栈信息转换成字符串

package cn.com.aia.grouplife.utils; import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; public class ExceptionMsgUtils { /** * getExceptionInfo * @param e * @return result限

Java日志出现异常,但没有完整的堆栈信息

最近生产机器出现了NullPointException, 但是并没有给出详细的堆栈信息,这让大家很郁闷,一开始以为是日志工具配置有问题,结果同样的配置其他机器却是正常的, 在网上找了几篇文章这篇虽然尝试可以解决问题,但是没搞懂究竟为什么这样设置,改动JVM默认配置是需要很大的勇气的哦... 然后在stackoverflow上找到了这个答案,这个被采纳的答案里有个得票率最高的链接,点这里 看了大半天终于搞明白了题主的意思了, 不打印异常堆栈日志是因为JVM在多次遇到同一异常信息时,前几次会输出堆栈

在error日志打印异常

在日志中打印异常,经常会看到以下的写法: logger.error(e.getMessage()); 或者是: e.printStackTrace(); 这两种其实都不太好. e.getMessage只会打印出异常的类型,但是不会显示出错的异常方法堆栈,无法在日志中找出错误代码 而e.printStackTrace();则是将异常打印到控制台,并不是打印到error日志中. 解决方法 看logger.error源码,可以发现: public void error(String msg, Thro