Chinaunix首页 | 论坛 | 博客
  • 博客访问: 493085
  • 博文数量: 78
  • 博客积分: 1271
  • 博客等级: 中尉
  • 技术积分: 1108
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-14 14:39
文章分类

全部博文(78)

文章存档

2015年(2)

2014年(6)

2013年(15)

2012年(18)

2011年(37)

分类: Java

2011-11-19 11:05:19

转载自:http://samboy.iteye.com/blog/135442

一、Log介绍

Log作为是调试程序,监视程序运行的一种重要的方式,特别是在多线程程序和分布式程序中,重要的调试方法。有人统计过在程序中,有4%的代码是Log。

绝大多数的大型开发项目都有它们自己专门用于记录程序日志和对程序跟踪调试的API。许多经验证明,调试信息的管理在软件开发过程中扮演了十分重 要的角色。日志管理通常提供了以下的几点好处:首先,它能在程序运行过程中精确的提供运行时的上下文(context)方便开发人员找到 BUG,一旦在程序中加入了Log 输出的代码,程序运行过程中就能自动的生成并输出logging信息。其次,log信息可以输出到不同的地方(控制台,文件,日志服务器等等)以备时候研 究。最后,除了在开发过程中发挥它的作用外,一个功能足够强大的日志记录开发包能当作一个审计工具(audit tool)使用。

同时,Log确实也存在一些缺陷,比如,它影响了程序运行的速度,增加了代码的开销,增加了许多无谓的输出。为了减少这些负面因数的影响,log应该被设计得尽量的高效和灵活。


一、Log介绍

Log作为是调试程序,监视程序运行的一种重要的方式,特别是在多线程程序和分布式程序中,重要的调试方法。有人统计过在程序中,有4%的代码是Log。

绝大多数的大型开发项目都有它们自己专门用于记录程序日志和对程序跟踪调试的API。许多经验证明,调试信息的管理在软件开发过程中扮演了十分重 要的角色。日志管理通常提供了以下的几点好处:首先,它能在程序运行过程中精确的提供运行时的上下文(context)方便开发人员找到 BUG,一旦在程序中加入了Log 输出的代码,程序运行过程中就能自动的生成并输出logging信息。其次,log信息可以输出到不同的地方(控制台,文件,日志服务器等等)以备时候研 究。最后,除了在开发过程中发挥它的作用外,一个功能足够强大的日志记录开发包能当作一个审计工具(audit tool)使用。

同时,Log确实也存在一些缺陷,比如,它影响了程序运行的速度,增加了代码的开销,增加了许多无谓的输出。为了减少这些负面因数的影响,log应该被设计得尽量的高效和灵活。

二、Log基本概念

1、  级别(Level):输出日志的重要程度,便于控制日志输出的多少。

2、  输出目的地(Appender):日志可以被写入的存储空间,常见的有控制台、文件、数据库、NT日志库、Syslog、远程文件服务器等等。

3、  输出格式(Layout):日志输出的内容,如日期格式、是否显示输出级别等。

三、Log问题

怎么记录Log,在什么地方记,记录什么信息,怎么很容易的在发布版中去掉Log。

3.1   Log的分级

在程序中Log进行分级是很重要的,通常可以分为6 级:ALL
DEBUG代表这些Log是用来输出调试信息,一般是在程序中不是非常重要的地方;INFO代表一些比较重要的信息,比如程序初始化完 毕;ERROR一般指程序本身引起的,可以恢复的错误;FATAL一般指程序所依赖的环境出现错误,使的程序不恢复。其中常用的是DEBUG和 ERROR。

3.2   在什么地方记Log
基本原则:

l         对程序的输入输出要以DEBUG记录下来,常包括从文件、数据库、网络、用户等输入的信息,向文件、数据库、网络输出的信息。

l         对重要对象或结构体的修改,要以INFO记录修改前的信息和修改后的状态。

l         不能忽视每个调用错误。

l         记下打印信息时所在的文件名和函数名(必须能区分开重载函数),有行数最好。

一般原则:

1、  在程序开始运行应该以INFO记录程序开始运行的消息。

2、  在程序初始化过程中,如果影响程序主体正常运行错误出现,应该以FATAL记录出现错误的函数名、事件和错误号;如果只是一个不影响程序正常功能的模块出现错误,则应该以ERROR记录出现错误的函数名、模块名、事件和错误号。

3、  在程序初始化完成后,应该以INFO记录程序初始化完成的消息。

4、  在函数的入口,如果需要验证参数,则可以以DEBUG的形式输出参数的信息。如果重要参数不正确,则应该以ERROR输出。

5、  在调用比较成熟的API时,如果失败,则以ERROR记录,并且有错误号记下错误号。

6、  在调用没有经过严格测试的库时,即使返回成功,也要以DEBUG的形式记录下返回的结果。

7、  以捕获异常时,以ERROR记录下错误。

8、  在进行数据库操作时,以DEBUG的级别输出执行的SQL词句,对于取回的结果,最好是能打印出所有构造完成的对象的信息。

9、  在与其它程序进行通信时,以DEBUG记录下通信过程中的重要信息。

10、 对程序中的每个线程,它们的初始化完成和开始运行也要以INFO记录下来。

11、 对程序中需要检查运行性能的地方,以DEBUG记录下运行耗时。

12、 程序正常结束时,和初始化的记录方式相同,对各个模块的卸载采用和加载是一样的处理方式。当程序都卸载完成后以INFO记录程序退出的消息。
阅读(6080) | 评论(0) | 转发(1) |
0

上一篇:迪米特法则

下一篇:项目策划的活动描述

给主人留下些什么吧!~~