当前位置:文档之家› 日志记录与异常处理规范(精)

日志记录与异常处理规范(精)

日志记录与异常处理规范(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: 包含了非常广泛的上下文信息,用于问题诊断。

l Info: 用于在产品环境中(粒度较粗)帮助跟踪执行过程的上下文消息。

l Warning: 警告消息,说明系统中可能存在问题。

例如,如果这个消息类别是有关安全性方面的。

l Error: 错误消息说明系统中出现了严重的问题。

这种问题通常都是不可恢复的,需要人工进行干预。

表1 日志记录程序 public class Log4JTest { // Logging 类由EMIP平台提供Logging logging = Logging.getInstance("STDOUT"; public void testLogging( { //安全日志 ("安全类型INFO级日志记录"; (Logging. SECURITY,"安全类型INFO级日志记录"; (Logging. SECURITY,"安全类型INFO级日志记录",new RuntimeException(; logging.error("安全类型ERROR级日志记录"; logging.error(Logging. SECURITY,"安全类型ERROR级日志记录";logging.error(Logging. SECURITY,"安全类型ERROR级日志记录",new RuntimeException(; //业务日志 ("业务类型INFO级日志记录"; (Logging. BUSINESS,"业务类型INFO级日志记录"; (Logging. BUSINESS,"业务类型INFO级日志记录",new RuntimeException(; logging.error("业务类型ERROR级日志记录"; logging.error(Logging. BUSINESS,"业务类型ERROR级日志记录"; logging.error(Logging. BUSINESS,"业务类型ERROR级日志记录",new RuntimeException(; //系统日志 ("业务类型INFO级日志记录"; (Logging. BUSINESS,"业务类型INFO级日志记录"; (Logging. BUSINESS,"业务类型INFO级日志记录",new RuntimeException(; logging.error("业务类型ERROR级日志记录"; logging.error(Logging. BUSINESS,"业务类型ERROR级日志记录"; logging.error(Logging. BUSINESS,"业务类型ERROR级日志记录",new RuntimeException(; ("系统类型INFO级日志记录";(Logging.PERFORMANCE,"系统类型INFO级日志记录";(Logging.PERFORMANCE,"系统类型INFO级日志记录",new RuntimeException(; logging.error("系统类型ERROR级日志记录";logging.error(Logging.PERFORMANCE,"系统类型ERROR级日志记录";logging.error(Logging.PERFORMANCE,"系统类型ERROR级日志记录",new RuntimeException(; } public static void main(String[] args { Log4JTest log4JTest = new 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级日志记录 ng.RuntimeException atcom.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:11 atcom.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级日志记录 ng.RuntimeException atcom.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:13 atcom.huawei.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级日志记录 ng.RuntimeException atcom.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:17 atcom.huawei.test.log4j.Log4JTest.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级日志记录 ng.RuntimeException atcom.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:19 atcom.huawei.test.log4j.Log4JTest.main(Log4JTest.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级日志记录 ng.RuntimeException atcom.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:23 atcom.huawei.test.log4j.Log4JTest.main(Log4JTest.java: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级日志记录 ng.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:25 atcom.huawei.test.log4j.Log4JTest.main(Log4JTest.java:31 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. 不要把system..out用于日志记录。

2. 被认为“已完成”或无隐错的代码,也应该能够根据配置输出日志(因为总有存在隐错的可能性,可能是通过修改引入的)。

3. 除非代码能够生成日志消息,并且它的日至输出能够被容易的配置,否则它不可用于生产环境。

4. 在重要代码段中需要详尽的日志记录输出。

5. 在用于生产环境前,需要修改和改进维护期间的日志记录陈述(例如,如果日志输出显得不明确)。

6. 日志消息应该分成不同优先级,并且调试消息应该指出一个构件的整个工作流程。

7. 明确日志消息优先级的选择,具有相同优先级的日志消息应该揭示一致级别的细节。

8. 从异常中提取有用信息 l 发生一个非预期的异常时:首先,必须记录异常及其堆栈跟踪状况。

相关主题