项目中关于日志部分的详细分析和设计(2009-07-31)

今天中午吃饭,同事问了我一个有关日志的问题。当时并没有讨论出一个比较满意的答案,下午自己仔细的总结了一下以前做过的项目,想了想在历次项目制作时都是怎么个处理过程。把自己在项目中的设计日志部分经验进行了一下整体,于是有了现在各位朋友们看到的这篇文章。说是深思熟虑更不如说的心血来潮,要是朋友们看到有错误或者设计不全面的地方希望大家说出来,我们一起考虑,一起设计,来完善这篇文章。好了我不废话了,我们来看正文。
我是以.net项目为例子的,所以里面有关日志的部分包含Log4Net,使用java的朋友可以当作Log4j来看待哦。首先为了便于大家有个整体了解,我来给个图:

都看到了,感觉分类很多项,有点晕吧,我们来一个一个说都是什么日志,都是做什么的,都是为了什么。
首先为了区别日志模块和程序,我把程序看做成一个用例了(看作边界也可以呀),在整个日志的分析中,根据输出的形式不同我把其分为三类:Log4Net、System.Out和WebService。
一、Log4Net:
主要是txt文件形式的日志输出,一般来讲Log4Net或Log4j是项目书写日志最常用的一个手段,几乎所有的项目都要用到(至今我做过的项目中还没有无Log4Net的)。一般来讲跨网段的项目这类日志由为重要,因为网段切换后,没有调试环境,txt形式的输出是唯一能在本地直接获得程序运行信息的方法。如上图:Log4Net里包括五类日志,根据时间、业务、小组习惯等各个方面可能有所不同,不过一般来讲分核心流程、详细流程、Web接口、数据信息、流程错误五种。
1、核心流程一般都是业务主线,信息以业务环节为主,作用是用来定位所要找日志的信息。
2、详细流程是各个不同业务在跑细节流程时候的日志,作用是同过主线日志类定位详细流程大致位置,再进行查找。
3、Web接口日志一般是来处理子系统间纠纷的重要依据,系统交互出现问题的时候,实体数据是最用说服力的。
4、数据信息日志是在系统内部数据传递时的数据记录。一般来讲上面两种流程会定位数据记录,方面数据记录日志的查找。
5、流程错误日志是错误日志的查询,也可以通过其定位数据记录日志从而查找系统出错当时的数据记录。
上面是五种Log4Net日志的用法和作用,在项目中的Log4Net日志是需要配置的,所以很多项目开发人员就喜欢将所有日志都放在一起,这样子比较省事。不过从我做项目的经验来看,我个人建议日志还是应该稍微分细一点,在查找的时候区分类型也是为方便开发人员和测试人员做的一件好事。日志和在一起和日志细分这两种项目我都做过,我推荐日志细分。
二、System.Out
主要是系统在运行中的一些相关信息输出,输出语句在不同语言有所不同,.net是“Console.WriteLine();”,java是“System.out.println();”。不过这不妨碍我们日志结构的设计思路。这种输出方式可能是很多项目开发时候所忽视的,因为了作为设计师不可能特地设计什么地方有此类输出,而程序员有不屑于或者就没这个想法去写这样子的输出代码(毕竟这增加开发量)。但是这不代表他不重要。项目信息输出主要分成两类:详细流程输出、自测程序输出。
1、详细流程输出Log4Net里面提到了,不再多说。
2、自测程序输出是用来专门做程序差错的。自测程序可以参考前面博客的“软件开发中的自测程序”。
三、WebService
很多大型系统中都会有一个日志系统,专门来处理各个子系统的相关日志,管理员可以通过查询日志数据库看到相关日志信息。一般来讲这种类型的日志主要是以记录错误和日常流程为主,所以主要包括主流程,接口日志,错误日志三种。
1、主流程日志一般记录日常流程,主要是方便后台管理员进行查看,还可以程序操作日志。
2、接口日志和Log4Net中一样不多说了。
3、错误日志也是,目的是为了系统出错,查看错误,计算系统的正确计算率,也可以检查系统质量。
上面针对各种日志过了一个介绍,包括不同类型,里面的一些具体信息,还有他们的作用,其实我们在日常的程序设计和代码编写中可以慢慢的引入。本来开发就是一个迭代式的过程,我们学习开发的过程也可以是迭代式的。
朋友们注意到了,我说了半天都是怎么设计日志类型和分解各类日志,没有说过为什么要用日志和怎么配置日志。因为我今天的重点是日志的分析和分类,而不是要讲日志的添加,有兴趣的朋友可以在查找看看,很简单。

posted on 2012-02-10 10:45  张隽永  阅读(752)  评论(2编辑  收藏  举报