从零开始编写自己的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.附 ...
随机推荐
- 关于几个主流语音SDK的接入问题
这两周都在忙着游戏上线还有接入游戏语音,两周分别接了腾讯语音和百度语音!!! 关于腾讯语音的一些问题 由于发现腾讯语音的在录完音频后的数据是编过码的所以出现了一些问题: *不能解码(腾讯方不提供解码算 ...
- LeetCode-5LongestPalindromicSubstring(C#)
# 题目 5. Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. ...
- Partition:增加分区
在关系型 DB中,分区表经常使用DateKey(int 数据类型)作为Partition Column,每个月的数据填充到同一个Partition中,由于在Fore-End呈现的报表大多数是基于Mon ...
- kafka源码分析之一server启动分析
0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...
- Coroutine in Java - Quasar Fiber实现--转载
转自 https://segmentfault.com/a/1190000006079389?from=groupmessage&isappinstalled=0 简介 说到协程(Corout ...
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
- 一起学 Java(二)面向对象
一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...
- equals变量在前面或者在后面有什么区别吗?这是一个坑点
我就不废话那么多,直接上代码: package sf.com.mainTest; public class Test { public static void main(String[] args) ...
- linux常用查看硬件设备信息命令
转载:http://blog.chinaunix.net/uid-26782198-id-3242120.html # uname -a # 查看内核/操作系统/CPU信息 ...
- 解决WINDOWS防火墙开启后Ping不通
WINDOWS系统由于安全考虑,当开启防火墙时,默认不允许外主机对其进行ping功能,即别的电脑ping不通本机.别的主机ping不通本机是因为本机的防火墙关闭了ICMP回显功能,只要把这回显功能打开 ...