多条目日志记录小结
背景:小组长临时被派到其他项目组(一般项目就2个人负责,唯有银行的超大型项目十几个人),致整个项目后续的一切事宜就由我来负责
环境:项目中catch记录log table后,返回默认值(false、null),或者无返回值
日志是整个项目开发中不可或缺,可记录用户访问系统时的一些状态,如异常日志、界面按钮动作等。平时通过按钮日志来查看用户的执行的动作、访问时间以及访问量。进而推导出用户的使用习惯,届时可针对性的进行推送以及其他业务。而当项目出现问题的时候,也能通过查看异常日志来第一时间找出问题的所在。及时对BUG进行处理。作为入行小白,刚开始时一直用Log4net工具。毕竟这是一个比较强大的包。只需在配置文件中配置好节点,便可将日志信息写入到数据库、txt 等等之中。
没完整接触过项目的时候不觉得日志有什么作用,直到当项目部署到服务器上运行出现异常,无法第一时间找到原因时才发现日志的重要性。 所以就很有必要捕获到项目中运行的异常,并且记录下来,这样之前的项目中针对log的处理就存在很大的问题
①未设置全局异常: 项目一但部署到服务器,和代码基本就说拜拜,全靠日志来检测,针对 try 之外的异常,catch无法捕获,这时候全局异常是日志就派上用场了,专治各种未捕获的异常,此时在项目中新建一类,重写OnException 方法、注册
②异常日志返回值: catch之前返回的都是默认值(false、null),这显然是不对的,改为throw ex,统一由异常过滤器返回值异常页
③未处理字符串连接问题: 项目中仅仅记录table log是不够的,当连接字符串出错,此时捕获的异常是无法写入到异常表中,所以要在全局异常过滤器中进行判断,当是字符串异常时,仅记录txt log,而不去记录到table中,然后跳转至错误页
除此异常日志,还有其他日志,常见的如 用户操作记录日志、上线人数日志等,由于银行系统的网站涉及到较多表操作(之前写主管放行时,也有前辈评论为: 面向数据库编程),这里采用底层SQL的方法来记录日志。这里作说明下
1.记录用户操作日志(表中有:BeforeData、AfterData栏位)
一般情况下,该日志用来记录用户在登陆系统后点击按钮的操作,如查询、删除(涉及多笔)、修改(涉及修改前后变化的数据)、新增等等。这其中,查询对简单,充其量需要记录下查询条条件。对于新增,如果客户有需要记录新增的实体数据,则可采取表单提交的方式进行提交。
删除:稍微复杂一些,这里客户要求的是记录多条目数据,和删除前的数据(XML节点标识),分两步走,一个创建的XML节点方法(参数:实体),一个查询实体的方法(参数:拼接联合主键集合),逻辑是:先将待删除数据的联合主键进行拼接(非List),然后调用查询实体的方法,得到实体集合,最后遍历集合,调用租XML节点的方法。如此即可。
修改:同样这里需要记录修改前后变化的数据,修改后的数据可通过表单提交的实体来获取数据,对于修改前的数据,通过表名、主键来进行查询,最后得到实体。拿到实体之后调用组XML方法即可。
---市人皆大笑,举手揶揄之