代码改变世界

说说程序中的日志

2012-11-07 18:21  dreamhappy  阅读(6806)  评论(6编辑  收藏  举报

      大家在写程序时,如何处理与日志相关的事宜。程序中的日志应该怎么写,以下是我的经验与分享

    日志一般用于记录程序运行信息,从而使开发者方便开发调试,了解生产环境执行情况。
在我看来程序中的日志主要分为两种:异常日志和非异常日志。
那什么样的日志属于异常日志

异常日志

 

异常日志可以通过记录日志的地方判断,一般异常日志都涉及到异常捕获,我在写程序时两个地方必定会加异常捕获,而异常捕获是记录异常日志的前提。
    1 与数据持久层相关的逻辑
    这部分逻辑涉及到数据库访问,可能出现的问题有数据库连接不存在,开发中很容易出现的数据库连接串写错,数据库用户名密码不合法。或者数据库之间混淆,sql错误,数据连接超时,甚至有数据库已崩溃的情况
    2 需要操作磁盘文件,特别是在服务器断创建文件时,应该特别注意。写文件涉及到程序运行账户必须有写权限,而程序运行账户很可能不具备写权限。我曾经遇到过一种情况:只有程序运行日志记录成功后,程序才能启动,当时又是wcf服务程序,排查原因,相当费劲。
上述这个问题,程序设计相当不合理,不应该把日志记录和程序启动耦合在一起,但是如果能够捕获异常记录日志,并返回相应的提示,程序会健壮很多。
下面引出了另一个问题,日志记录的形式和位置
下面是几种不同的日志记录形式。

按日期依次记录,每个文件夹下可以按小时生成txt文件,这样记录的日志清晰可读,排查寻找问题比较容易

 

另一种是使用log4等日志组件,直接写成一个log.txt


由于程序抓错倾向于在接近用户的层次,在传统的三层模式中即webform.cs文件中。

下面说说另一种日志,非异常日志

非异常日志

 

     非异常日志用的最普遍的地方就是windows服务,windows服务安装程序比较复杂,大多通过控制台命令安装,伴随系统一起启动。
主要执行多数据库,多系统之间的数据同步,或者异步存储,订单状态改变等后台系统任务。开发者往往根据日志来观察程序的运行情况,这种情况下,运行日志越详细越好。

如果你觉得我的文章对你有所帮助,请点 【推荐】

推荐阅读

一步一步实现网站的多语言版本

我的程序优化-尽量减少数据库连接操作