系統日志和異常的處理①
系統需要越來越自動化,我們需要引入日志記錄和異常捕獲
管理員的操作記錄需要被記錄,看出哪些模塊是頻繁操作,分析哪些是不必要的功能,哪些是需要被優化的。
系統的異常需要被捕獲,而不是將系統出錯顯示出來給用戶就不了了知。我們需要異常日志不斷改進系統。
我們老說用戶,我們還沒有用戶權限的表,所以我們在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