日志记录与异常处理规范_第1页
日志记录与异常处理规范_第2页
日志记录与异常处理规范_第3页
日志记录与异常处理规范_第4页
日志记录与异常处理规范_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、日志记录与异常处理规范(2006-09-19 10:02:15转载 日志记录与异常处理规范 1 日志记录规范规范日志设计规范主要目的是节省工作量,帮助对问题进行诊断。最终,终端用户可以获得更好的应用程序,并能从技术支持团队获得迅速的响应。 1.1 日志API 在使用 Java 平台进行开发时,使用的日志 API:Log4j-1.2.8.jar 1.2 日志分类 l Security:记录外部对系统进行的各项操作 l Business:记录和跟踪业务逻辑执行过程 l Performance:记录和跟踪代码执行情况 1.3 日志级别日志级别有: l Debug: 包含了非常广泛的上下文信息,用于问

2、题诊断。 l Info: 用于在产品环境中(粒度较粗)帮助跟踪执行过程的上下文消息。 l Warning: 警告消息,说明系统中可能存在问题。例如,如果这个消息类别是有关安全性方面的。 l Error: 错误消息说明系统中出现了严重的问题。这种问题通常都是不可恢复的,需要人工进行干预。 表1 日志记录程序 public class Log4JTest / Logging 类由EMIP平台提供 Logging logging = Logging.getInstance("STDOUT" public void testLogging( /安全日志 (&

3、quot;安全类型INFO级日志记录" (Logging. SECURITY,"安全类型INFO级日志记录" (Logging. SECURITY,"安全类型INFO级日志记录",new RuntimeException(; logging.error("安全类型ERROR级日志记录" logging.error(Logging. SECURITY,"安全类型ERROR级日志记录" logging.error(Logging. SECURITY,"

4、安全类型ERROR级日志记录",new RuntimeException(; /业务日志 ("业务类型INFO级日志记录" (Logging. BUSINESS,"业务类型INFO级日志记录" (Logging. BUSINESS,"业务类型INFO级日志记录",new RuntimeException(; logging.error("业务类型ERROR级日志记录" logging.error(Logging. BUSINESS,&

5、quot;业务类型ERROR级日志记录" logging.error(Logging. BUSINESS,"业务类型ERROR级日志记录",new RuntimeException(; /系统日志 ("业务类型INFO级日志记录" (Logging. BUSINESS,"业务类型INFO级日志记录" (Logging. BUSINESS,"业务类型INFO级日志记录",new RuntimeException(; logging.er

6、ror("业务类型ERROR级日志记录" logging.error(Logging. BUSINESS,"业务类型ERROR级日志记录" logging.error(Logging. BUSINESS,"业务类型ERROR级日志记录",new RuntimeException(; ("系统类型INFO级日志记录" (Logging.PERFORMANCE,"系统类型INFO级日志记录" (Logging.PERFORMAN

7、CE,"系统类型INFO级日志记录",new RuntimeException(; logging.error("系统类型ERROR级日志记录" logging.error(Logging.PERFORMANCE,"系统类型ERROR级日志记录" logging.error(Logging.PERFORMANCE,"系统类型ERROR级日志记录",new RuntimeException(; public static void main(String args Log4JTe st log4JTest = new

8、 Log4JTest(; log4JTest.testLogging(; 输出结果(日志记录的头部分的组成结构是:时间戳日志级别日志类型日志内容) 2006-09-13 18:43:38 INFO安全类型INFO级日志记录 2006-09-13 18:43:38 INFO SECURITY安全类型INFO级日志记录 2006-09-13 18:43:38 INFO SECURITY安全类型INFO级日志记录 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:11 at

9、 com.huawei.test.log4j.Log4JTest.main(Log4JTest.java:31 2006-09-13 18:43:38 ERROR 安全类型ERROR级日志记录 2006-09-13 18:43:38 ERROR SECURITY安全类型ERROR级日志记录 2006-09-13 18:43:38 ERROR SECURITY安全类型ERROR级日志记录 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:13 at com.huawei

10、.test.log4j.Log4JTest.main(Log4JTest.java:31 2006-09-13 18:43:38 INFO 业务类型INFO级日志记录 2006-09-13 18:43:38 INFO BUSINESS业务类型INFO级日志记录 2006-09-13 18:43:38 INFO BUSINESS业务类型INFO级日志记录 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:17 at com.huawei.test.log4j.Log4J

11、Test.main(Log4JTest.java:31 2006-09-13 18:43:38 ERROR 业务类型ERROR级日志记录 2006-09-13 18:43:38 ERROR BUSINESS业务类型ERROR级日志记录 2006-09-13 18:43:38 ERROR BUSINESS业务类型ERROR级日志记录 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:19 at com.huawei.test.log4j.Log4JTest.main(L

12、og4JTest.java:31 2006-09-13 18:43:38 INFO 系统类型INFO级日志记录 2006-09-13 18:43:38 INFO PERFORMANCE系统类型INFO级日志记录 2006-09-13 18:43:38 INFO PERFORMANCE系统类型INFO级日志记录 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:23 at com.huawei.test.log4j.Log4JTest.main(Log4JTest.ja

13、va:31 2006-09-13 18:43:38 ERROR 系统类型ERROR级日志记录 2006-09-13 18:43:38 ERROR PERFORMANCE系统类型ERROR级日志记录 2006-09-13 18:43:38 ERROR PERFORMANCE系统类型ERROR级日志记录 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:25 at com.huawei.test.log4j.Log4JTest.main(Log4JTest.java:31

14、 1.4 日志消息的格式除了典型的应用程序状态信息之外,通过配置还应记录以下信息(配置方法参见配置模版): l 线程 ID l 调用程序的标识 l 时间戳 l 源代码信息 1.5 日志配置 1.5.1 日志配置模板日志模版部署在同一应用平台上的各个模块,使用同一个XML配置文件进行配置。各个模块在配置文件中配置各自的日志Appender。 1.5.2 动态配置文件 EMIP平台的在Logging类中使用 DOMConfigurator 中的 configureAndWatch( 方法会对 Log4J 进行配置,默认一分钟为周期动态监视日志配置文件。 1.6 日志记录规范 1. 不要把syste

15、m.out用于日志记录。 2. 被认为“已完成”或无隐错的代码,也应该能够根据配置输出日志(因为总有存在隐错的可能性,可能是通过修改引入的)。 3. 除非代码能够生成日志消息,并且它的日至输出能够被容易的配置,否则它不可用于生产环境。 4. 在重要代码段中需要详尽的日志记录输出。 5. 在用于生产环境前,需要修改和改进维护期间的日志记录陈述(例如,如果日志输出显得不明确)。 6. 日志消息应该分成不同优先级,并且调试消息应该指出一个构件的整个工作流程。 7. 明确日志消息优先级的选择,具有相同优先级的日志消息应该揭示一致级别的细节。 8. 从异常中提取有用信息 l 发生一个非预期的异常时:首先

16、,必须记录异常及其堆栈跟踪状况。其次,应该使用一种用户界面友好的方式来标识错误页面,这对于终端用户和技术支持小组来说都是非常有帮助的。 l 使用户所报告的问题与特定的日志异常之间建立某种关联:为每个异常都记录一个唯一的 ID。这个 ID 可以告诉用户,也可以包含在终端用户所填写的问题报告表单中。让技术支持团队可以快速对问题作出响应。考虑到可读性的问题。 9. 确保日志记录语句中调用toString(方法的对象不会是空值,以免这些语句引起失败。 10. 通过相应的配置,用来显示生成日志输出的那个类、方法和行号(Log4j提供此功能)。该设置在生产中应该被关闭,因为生成这类信息的代价非常高。 11

17、. 记录日志时不要把toString(方法用在访问具有许多方法并生成大串的复杂对象上。(也可以给这种日志输出定义一个低优先级的输出级别)。 1.7 日志文件的管理日志文件的生成根据具体情况选用以下两者之一: l RollingFileAppender l DailyRollingFileAppender 2 异常处理规范 2.1 规范 1. 当程序产生异常时,必须捕捉并处理异常、将异常记录到日志中(除非打算抛出异常)。 2. 不要处理能够避免的异常。 3. 在异常处理模块中提供适量的错误原因信息。 4. 使用finally避免资源泄露。 5. 不要从try区段中返回。 6. 不要在 final

18、ly 内部使用 return 语句。它不仅会影响函数的正确返回值,而且它可能还会导致一些异常处理过程的意外终止,最终导致某些异常的丢失。 7. 将try/catch区段置于循环之外。 8. 不要将异常用于程序流程控制。 9. 通过抛出异常,获取构造函数中的错误信息。 10. 抛出异常之前先将对象恢复为有效状态。 11. 记录异常不要保存exception.getMessage(,而要记录exception.toString(。 12. 一个方法不应抛出太多类型的异常。 说明:如果程序中需要分类处理,则将异常根据分类组织成继承关系。如果确实有很多异常类型首先考虑用异常描述来区别,throws/exception子句标明的异常最好不要超过三个。 13. 不要定义 Error 和 R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论