构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)2014-08-10系统日志和异常的处理①系统需要越来越自动化,我们需要引入日志记录和异常捕获管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的。系统的异常需要被捕获,而不是将系统出错显示出来给用户就不了了知。我们需要异常日志不断改进系统。我们老说用户,我们还没有用户权限的表,所以我们在Home中先加入一个虚拟用户吧!首先我们创建一个用户类AccountModel放在App.Models下的Sys文件夹下
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace App.Models.Sys{public class AccountModel{public string Id { get; set; }public string TrueName { get; set; }}}AccountModel.cs在HomeController或者AccountController插入代码AccountModel account = new AccountModel();account.Id = "admin";account.TrueName = "admin";Session["Account"] = account;下面将带来系统日志的记录,主要记录管理员的增、删、改等操作的成功与失败的异常记录日志插件有著名的log4net,可以输出多种格式,如文本,xml,数据库等,我们没有必要做到这么强大,我们只做符合系统的就可以了,记录到数据库,方便做统计等操作,我们何时何地记录日志?   在Controller层做记录;   当用户的操作成功时记录;   当用户的操作失败时记录;首先创建数据库存放表:SysLog
USE DBGO/****** Object:Table [dbo].[SysLog]Script Date: 11/20/2013 21:13:38 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE [dbo].[SysLog]([Id] [varchar](50) NOT NULL, --GUID[Operator] [varchar](50) NULL,--操作人[Message] [varchar](500) NULL,--操作信息[Result] [varchar](20) NULL,--结果[Type] [varchar](20) NULL,--操作类型[Module] [varchar](20) NULL,--操作模块[CreateTime] [datetime] NULL,--操作事件 CONSTRAINT [PK_SysLog] PRIMARY KEY CLUSTERED ([Id] ASC)WITH (PAD_INDEX= OFF, STATISTICS_NORECOMPUTE= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS= ON, ALLOW_PAGE_LOCKS= ON) ON [PRIMARY]) ON [PRIMARY]GOSET ANSI_PADDING OFFGOSysLogSQL
EF更新模型,创建SysLogModel类放在App.Models下的Sys文件夹下
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ComponentModel.DataAnnotations;namespace App.Models.Sys{public class SysLogModel{[Display(Name = "ID")] public string Id { get; set; } [Display(Name = "操作人")] public string Operator { get; set; } [Display(Name = "信息")] public string Message { get; set; } [Display(Name = "结果")] public string Result { get; set; } [Display(Name = "类型")] public string Type { get; set; } [Display(Name = "模块")] public string Module { get; set; } [Display(Name = "创建时间")] public DateTime? CreateTime { get; set; }}}SysLogModel.cs