• 从零开始编写自己的C#框架(20)——框架异常处理及日志记录


    最近很忙,杂事也多,所以开发本框架也是断断续续的,终于在前两天将前面设定的功能都基本完成了,剩下一些小功能遗漏的以后发现再补上。接下来的章节主要都是讲解在本框架的基础上进行开发的小巧。

      本框架主要有四种日志记录,分别是登陆日志、操作日志、手动收集异常日志和自动收集异常日志四种,大部分日志采集都不用开发者动手实现,在模板与相关的功能类中已自动帮我们将所需要的日志记录下来了。

      登陆日志,记录的当然是用户登陆、退出、在线时长的日志,主要是在登陆(Login.aspx)、后端首页(Main.aspx,有一个退出按钮)和在线列表(OnlineUsersList.aspx,有踢除用户下线按钮)等几个页面使用,所使用到的逻辑层函数放在LoginLogBll.cs(用户登陆日志自定义逻辑类)与OnlineUsersBll.cs(OnlineUsersBll逻辑类)两个文件中。登陆页面主要是记录用户登陆系统的日志信息,而其他页面则是记录用户退出系统的日志信息,同时记录在线时长。当然后端首页有个定时器,会每分钟更新用户最后在线时间,以便用户退出系统时(或直接关闭浏览器后),相关的程序能及时记录用户退出信息及在线时长。

      操作日志,记录的是用户在后端管理系统中,什么时间打开了那个页面,然后进行的是添加、修改、删除记录、更新状态、删除图片、踢除用户下线......等各种操作信息。方便出现问题时,管理人员能快捷的查出操作人员追究对应责任;也方便领导查看后端相关人员有没有使用系统,分析系统推广效果(很多OA或企业管理系统在企业购买回来后,不少员工都很抵触不去使用系统,造成花了很多钱购买来的系统成为摆设,当然这个操作记录并不能对这种情况的改善有很大的帮助,但至少让相关人员知道员工对系统的使用情况,哈哈...)

      对于操作日志的记录,开发人员基本上不用去编写代码,因为在生成的模板函数中已全面的记录各种操作日志,除非自定义的函数中并没有去调用模板生成的添加、修改、删除等函数,直接使用SubSonic3.0插件接口或ADO.NET接口,那样的话就得自己编写代码记录了。而对于用户进入过那些页面的记录,由于后端系统开发的页面都必须继承PageBase类,每个后端页面打开时,都会运行该类的初始化函数,该初始化函数中会调用CommonBll.UserRecord(this)函数,忠诚的记录下用户的操作轨迹。

      具体实现代码大家可以查看逻辑层生成的模板函数类,里面所有添加、修改、删除、更新函数,都会调用UseLogBll.GetInstence().Save()这个函数,记录用户进行了什么样的操作。而自定义函数想要记录用户操作说明,也可以直接调用这个函数,写上自定义操作说明。

      手动收集异常日志,对于异常,有的朋友建议都将它抛出来,这样的话容易发现Bug,然后进行修复,但都是这样处理的话,用户体验就会比较差,所以我一般是数据层将异常抛出来,在逻辑层或UI层将它们都捕捉起来,然后在catch块中调用CommonBll.WriteLog("异常说明", e)把异常记录到文件中,当系统交付给使用方时,使用人员进行某些操作时,万一出现异常也只是显示失败或操作不了,而不会抛出黄页,需要维护时,只要使用方将软件或网站根目录下的Data文件夹打包发给开发人员即可分析查看异常问题所在。

      当然对于那些需要非常详细的日志记录的程序,也可以将每一步执行的结果调用日志函数记录下来,方便开发人员分析问题。

      对于手动收集异常的调用代码,大家可以查看逻辑层(Solution.Logic.Managers)的SubSonic文件夹下面的模板类和UI层代码。

      自动收集异常日志,顾名思义就是自动记录所有我们没有捕捉到的异常。虽然我们上面已做了异常捕捉处理,但难免有些地方会忘记捕捉,那么我们就在全局异常处理那里将它记录下来。我们在Global.asax文件的Application_Error()函数中进行异常采集,收集服务器端页面发生的所有异常,调用自定义函数ErrorLogBll.GetInstence().Save()将它们记录到数据库中。

      通过以上四种日志记录,基本上将我们需要的信息都记录了下来,协助我们排查安全问题、排查各种错误。

    解决方案下载:(本解决方案忘了将之前注释掉的权限打开了...下次处理后再重新发出来吧)

    由于框架不是非常成熟,很多朋友不是用来学习而是直接用到项目中,但不熟悉框架引起不少小问题,所以停止提供下载,有需要学习的可以到群共享里下,不便之处敬请谅解。

    说明:试过有朋友将所有章节中的解决方案都使用前面测试例子中的数据库,所以一直显示不了列表,所以查看过后才知道数据库没有记录引起的......所以在这里说明一下,在开发过程中,根据需要我会对数据表或字段进行增改操作,为了避免写太多的更新SQL语句,所以每个章节所配的数据库只是对应本章节,大家使用新的解决方案时就重新附加新的数据库。大家打开数据字典就会查看到,几乎对数据字典的每个修改我都有记录下来,方便大家比对。

    版权声明:
      本文由AllEmpty原创并发布于博客园,欢迎转载,未经本人同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如有问题,可以通过1654937@qq.com 联系我,非常感谢。

      发表本编内容,只要主为了和大家共同学习共同进步,有兴趣的朋友可以加加Q群:327360708 ,大家一起探讨。

      更多内容,敬请观注博客:http://www.cnblogs.com/EmptyFS/

    只有将自己置空,才能装进更多的东西
  • 相关阅读:
    tableView cell 设置圆角 响应链
    iOS
    git code 初次上传
    隐藏导航栏,偏移20PX
    Mysql数据库远程连接
    umeng推送, 生产环境deviceToken失效可能原因
    KeyChainWrapper
    UIVisualEffectView(高斯模糊效果)
    UVA 11582 Colossal Fibonacci Numbers! 快速幂
    HDU 2859 Phalanx DP
  • 原文地址:https://www.cnblogs.com/FinleyJiang/p/7600856.html
Copyright © 2020-2023  润新知