系統日志和異常的處理①
系統需要越來越自動化,我們需要引入日志記錄和異常捕獲
管理員的操作記錄需要被記錄,看出哪些模塊是頻繁操作,分析哪些是不必要的功能,哪些是需要被優化的。
系統的異常需要被捕獲,而不是將系統出錯顯示出來給用戶就不了了知。我們需要異常日志不斷改進系統。
我們老說用戶,我們還沒有用戶權限的表,所以我們在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 DB GO /****** Object: Table [dbo].[SysLog] Script Date: 11/20/2013 21:13:38 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE 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] GO SET ANSI_PADDING OFF GO SysLogSQL
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