从零开始编写自己的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/
从零开始编写自己的C#框架(20)——框架异常处理及日志记录的更多相关文章
- python --- 20 约束 异常处理 MD5 日志
一.类的约束 1.抛出异常 NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完后代码可继 ...
- 20 约束 异常处理 MD5 日志
三十九, 一.类的约束 1.抛出异常 NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完 ...
- 从零开始编写自己的C#框架(1)——前言
记得十五年前自学编程时,拿着C语言厚厚的书,想要上机都不知道要用什么编译器来执行书中的例子.十二年前在大学自学ASP时,由于身边没有一位同学和朋友学习这种语言,也只能整天混在图收馆里拼命的啃书.而再后 ...
- 从零开始编写自己的C#框架 ---- 系列文章
目录: 从零开始编写自己的C#框架(1)——前言从零开始编写自己的C#框架(2)——开发前的准备工作从零开始编写自己的C#框架(3)——开发规范从零开始编写自己的C#框架(4)——文档编写说明从零开始 ...
- 从零开始编写自己的C#框架(17)——Web层后端首页
后端首页是管理员登陆后进入的第一个页面,主要是显示当前登陆用户信息.在线人数.菜单树列表.相关功能按键和系统介绍.让管理员能更方便的找到息想要的内容. 根据不同系统的需要,首页会显示不同的内容,比如显 ...
- 从零开始编写自己的C#框架(8)——后台管理系统功能设计
还是老规矩先吐下槽,在规范的开发过程中,这个时候应该是编写总体设计(概要设计)的时候,不过对于中小型项目来说,过于规范的遵守软件工程,编写太多文档也会拉长进度,一般会将它与详细设计合并到一起来处理,所 ...
- 从零开始编写自己的C#框架(25)——网站部署 【转】
服务器安全部署文档 目录1. 前言.. 3 2. 部署环境.. 3 2.1 服务器环境信息.. 3 3. 磁盘阵列配置.. 4 4. 安装操作系统.. ...
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- 从零开始编写自己的C#框架(25)——网站部署
导航 1.关掉访问保护 2.发布网站 3.复制网站到服务器 4.添加新网站 5.设置网站访问权限 6.设置文件夹访问权限 7.控制可更新文件夹执行权限 8.设置“应用程序池”.net版本与模式 9.附 ...
随机推荐
- 【AR实验室】ARToolKit之概述篇
0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...
- Jquery的点击事件,三句代码完成全选事件
先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- Modify Branding of FreeCAD
Modify Branding of FreeCAD eryar@163.com This article describes the Branding of FreeCAD. Branding me ...
- Android Ormlite 学习笔记2 -- 主外键关系
以上一篇为例子,进行主外键的查询 定义Users.java 和 Role.java Users -- Role 关系为:1对1 即父表关系 Role -- Users 关系为:1对多 即子表关系 下面 ...
- AJAX实现登录界面
使用php跳转界面和AJAX都可实现登录界面的跳转的登录失败对的提醒.但是,php跳转的方式 需要额外加载其他界面,用户体验差.AJAX可实现当前页面只刷新需要的数据,不对当前网页进行 重新加载或者是 ...
- document.compatMode
在我电脑屏幕上显示的 电脑是 1920*1080这是在document.compatMode:css1Compat模式 window.screen.availWidth 1920 window.scr ...
- Linux常用命令
命令格式与目录处理命令 ls 命令格式与目录处理命令 ls 命令格式:命令 [-选项][参数] 例:ls -la /etc 说明: 1)个别命令使用不遵循格式 2)当有多个选项时,可以写在一起 3)简 ...
- VPN连接常见错误汇总
提示远程服务器没有响应. 这种情况有两种情况,一种是远程服务器出现故障.另一种是自己的电脑出现问题,具体原因我还没有找到,但是可以肯定的是注册表除了问题,一个终极的解决办法就是把注册表替换了.先将HK ...
- ReactNative入门(安卓)——API(下)
LayoutAnimation - layout动画 当布局发生改变时的动画模块,它有两个方法: 1. 最常用的方法是 LayoutAnimation.configureNext(conf<Ob ...
- 开源一个WEB版本GEF,基于SVG的网页流程图框架
8月开始断断续续的制作这个web gef,没有任何依赖,完全原生js开发,目前已经完成了雏形,基本上可以在项目里应用了. 下图展示的是demo1的效果,包括拖拽,生成连线,点击生成\取消墙体,整个de ...