Java Exception信息的日志输出
http://fly-hyp.iteye.com
这篇文档是用word写的,web格式不完整如需要请看附件
1.概要
这篇文章讲的是Java中异常日志的主题,主要是讲他们在所有软件过程中如何帮助调试错误的。如果您是初级的Java水平,这篇文章会指导您如何使用日志(Log4j)和异常。如果您是资深的Java工程师,和我一样,一定也遇到整个项目团队关于异常日志滥用的行为。您也希望给初级工程师写一个指导,帮助大家用好异常日志,或想使项目中规范使用,这篇文章也是为探讨这些的。
Java中日志(Log )和异常(Exception)是两项基本的功能。来到公司我也看了不少的现有代码,发现大家的使用方式是不太一样的,也存在一些明显的误用。
2.基础
使用例子
因为大家的开发习惯等不一样,所以异常日志的使用方式也会不一样,先和我一起看看典型例子吧。
例如:
3.异常日志在软件开发流程中的位置
异常是Java提供的异常的处理流程方式,但发生异常时Exception类的内部信息就是为了显示异常发生的来龙去脉了。所以Exception的各种属性信息一定要好好理解清楚。
Log就是记录日志、使用日志。现在我做的各种项目中用的最多的就是Log4j。日志有很多种用途,记录程序运行的错误肯定是最重要的。
下面我讲一下Log记录错误的原理。
Log中的记录错误可以分为:
非程序原因的错误(网络错误、用户输出入错)
程序原因的错误
已知的
可做简化处理
未知的
应该记录完备,不要丢失有用的信息。
4.Exception对象使用详解
Cause属性:用于存放内部异常对象信息
Throwable
getCause()
Throwable
initCause(Throwable cause)
StackTrace属性:用于存放异常对象建立时的运行堆栈信息(可以被修改)
StackTraceElement[]
getStackTrace()
void setStackTrace(StackTraceElement[] stackTrace)
强调一点,如果是因为捕获了异常而要抛出新的异常千万不要丢失内部异常信息(因为内部异常对象才是Root Cause)。有两种方式保存内部异常对象。
可以在创建异常对象时传入内部异常对象
Throwable(String message, Throwable cause)
Throwable(Throwable cause)
通过cause记录内部异常的异常打印效果
在创建新的异常后调后setStackTrace设置内部堆栈信息
无论哪种方式,只要内部异常堆栈没有丢失,就非常容易找到发生错误的代码。显示方式只是习惯问题。当然,最好在一个软件项目中可以制定规范,遵从某一种风格。
5.异常日志的输出流程
6.一些技巧
1. 对于已知不是程序内部错误的异常,可以不要打印错误信息。至少不要打印为了定位错误错误的异常堆栈的信息
例如:用户输入错误、已知的网络错误等
2. 对于大型软件(或访问量大)特别要注意日志的量(不要打的太多)。
3. 普通的调试日志还是在适当的时候删掉为好。
4. Log4j,在Dev环境让所有输出都定向到控制台,以方便查看。将下面文件放在类路径下。
分享到:
相关推荐
今天小编就为大家分享一篇Java将Exception信息转为String字符串的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
anylog 为开发人员提供一个易于使用的平台,帮助开发人员在正在运行的系统中随时加入自己想要的日志,而免于修改代码和重启。 使用场景举例 1、一些同学在写代码时,把异常吃掉了,使得问题难以查找,可以...
* 可以输出到控制台和指定的文件中, 分为4个级别, 由低到高分别为: debug, info, warn, error * 输出级别: * * <li> debug: 输出 debug, info, warn, error * <li> info: 输出 info, warn, error * <li> ...
NoException是一个Java库,用于以简洁,统一和架构简洁的方式处理异常。 System . out . println( Exceptions . log() . get(() - > " test " . substring( 5 )) . orElse( " fallback " )); 文档:, 下载:请...
该类的大部分构造器和方法都已经过时,但是该类使用非常方便,因此目前使用还很普遍,该类的另一个主要功能是,在数据库操作中,它允许将毫秒值表示为SQL DATE值,是数据库操作中java.sql.Date的父类。关于数据库...
import java.io.*; import java.util.*; import java.util.zip.Adler32; import java.util.zip.CheckedInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip....
import java.util.List; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.Properties; import javax.mail.Session; import javax.mail.Transport; import javax....
1.如果运行程序出现错误:“Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory”,这是因为项目缺少slf4j-api.jar和slf4j-log4j12.jar这两个jar包导致的错误。 2.如果运行程序...
完全相同的log代码将出现在系统的每一个BusinessObject中。 按照AOP的思想,我们应该把日志记录代码分离出来。要将这些代码分离就涉及到一个问题,我们必须知道商业逻辑代码何时被调用,这样我们好插入日志记录...
} } catch (Exception e) { com.hzfy.util.log.Log4jApp.getLogger().error("得到本地ACCESS数据库的连接异常"+e.getLocalizedMessage()); return null; } }
/** java使用内存 */ private double javaUseMemory; public String getOsName() { return osName; } public void setOsName(String osName) { this.osName = osName; } public int getTotalThread() ...
log4j对log4j修改,重新修改日志写出格式以便支持flume-ng的格式对exception信息重构
java aspose word 转 pdf jar包 try { Document doc = new Document(wordPath); fileOS = new FileOutputStream(new File(pdfFilePath)); // 保存转换的pdf文件 doc.save(fileOS, SaveFormat.PDF); }...
13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 ...
13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 ...
《Java测试题3》 <br>一、 是非题5题(每题3分) 1、 Java是一种计算机语言,更是一种计算机技术。 ( ) 2、 Java支持多继承。 ( ) 3、 接口是特殊的抽象类。 ( ) 4、Java数据库连接用的是ODBC。 ...
LogHelp.getLogger().debug("this file name is(" + fileName + ")"); } catch (Exception e) { e.printStackTrace(); } // file to zip and get zip name String outputName = ZipHelp.newInstance()....
13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 ...
1、如果报了如下错误: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger 那是因为没有把log4j-1.2.13.jar倒入到工程中。 2、如果报了如下错误: org.smslib.GatewayException:...
进行高精度运算可以用java.math包中BigDecimal类中的方法。 自动类型提升又称作隐式类型转换。 强制类型转换:int ti; (byte) ti ; 强制转换,丢弃高位 宣告变量名称的同时,加上“final”关键词来限定,这个...