后台日志設計
作為一個完善的網站系統,系統日志是必不可少的,常用的組件Log4net就很不錯,不過,這些並不適合后台的簡要日志,用來記錄比如說,系統登錄操作的日志,當然也可以,不過保存在文本中是一個很坑爹的事情,我之前也動態配置過Log4net,一個用來記錄異常信息,一個用來后台操作信息,不過,看了一些資料,把后台操作信息寫在數據庫也是一個不錯的方案.
可能有人會問后台操作信息有什么用?
當然有用,比如,系統管理員可以很輕松的知道網站管理員最近干了什么,比如xxx偷偷登陸系統刪除一些資料的信息,我們就可以很輕松的跟蹤管理員的信息,甚至是ip,讓那些異常的ip都現形.哈哈哈!
要想設計一個日志管理,我們需要建立一個數據庫
大致記錄管理員登錄的信息,然后開始設計
主要思想:
就是管理員操作的時候就把信息插入數據庫,
當然管理日志信息,只能刪除三天以前的,也就是說日志強制保留三天.
這里用的是JQuery MINIUI,
本來以前是打算用EasyUI做后台的,不過demo實例,不像MINIUI那么完整,
EasyUI中文教程蠻多的
這只是一個初步的雛形,還在慢慢修改!
前台頁面大致代碼:
1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2: <html xmlns="http://www.w3.org/1999/xhtml">
3: <head>
4: <title>日志信息管理</title>
5: <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
6: <link href="../css/demo.css" rel="stylesheet" type="text/css" />
7:
8: <script src="../scripts/jquery-1.6.2.min.js" type="text/javascript"></script>
9:
10: <script src="../scripts/miniui/miniui.js" type="text/javascript"></script>
11:
12: <link href="../scripts/miniui/themes/default/miniui.css" rel="stylesheet" type="text/css" />
13: <link href="../scripts/miniui/themes/icons.css" rel="stylesheet" type="text/css" />
14: </head>
15: <body>
16: <div class="mini-toolbar">
17: <h1>
18: 日志信息管理</h1>
19: <a class="mini-button" iconcls="icon-remove" onclick="remove">清空日志</a>
20: (默認日志保留三天,只能清空三天前的所有日志)
21: <span class="separator">
22: 關鍵字:
23: <input class="mini-textbox" id="key" name="key" type="text" />
24: <span class="separator"></span><a class="mini-button" iconcls="icon-search" id="search">
25: 查詢</a>
26: </div>
27: <div id="datagrid1" class="mini-datagrid" style="width: 100%; height: 400px;" allowresize="true"
28: url="Data/GetOurInfo.ashx?method=SearchSystemLog" idfield="Id" multiselect="false">
29: <div property="columns">
30: <!--<div type="indexcolumn"></div> -->
31: <div type="checkcolumn">
32: </div>
33: <div id="deal" name="action" width="100" headeralign="center" align="center" renderer="onActionRenderer"
34: cellstyle="padding:0;">
35: 操作
36: </div>
37: <div field="UserName" width="100" headeralign="center" allowsort="true">
38: 管理員</div>
39: <div field="Url" width="140">
40: ip地址</div>
41: <div field="Title" width="400">
42: 日志</div>
43: <div field="AddTime" width="100" renderer="onAddTimeRenderer" >
44: 訪問時間</div>
45: </div>
46: </div>
47:
48: <script type="text/javascript">
49: mini.parse();
50:
51: var grid = mini.get("datagrid1");
52: // grid.load();
53: grid.sortBy("AddTime", "desc");
54:
55: function remove(e) {
56: if (confirm("確定刪除三天前的日志記錄?")) {
57: grid.loading("操作中,請稍后......");
58: $.ajax({
59: url: "Data/GetOurInfo.ashx?method=RemoveSystemLog",
60: success: function (text) {
61: grid.reload();
62: },
63: error: function () {
64: }
65: });
66: }
67:
68: }
69: function search(e) {
70: var key= mini.get("key");
71: grid.load({ key: key.value });
72: }
73: $("#search").bind("click",function(e)
74: {
75: search(e);
76: });
77: $("#key").bind("keydown", function (e) {
78: if (e.keyCode == 13) {
79: search(e);
80: }
81: });
82: /////////////////////////////////////////////////
83: function onAddTimeRenderer(e) {
84: var value = e.value;
85: if (value) return mini.formatDate(value, 'yyyy-MM-dd hh:mm');
86: return "";
87: }
88:
89: grid.set({ footerStyle: "padding-right:10px;" });
90:
91:
92:
93: </script>
94:
95: </body>
96: </html>
后台大致的代碼:
1: /// <summary>
2: /// 刪除系統日志
3: /// </summary>
4: /// <param name="context">刪除系統日志</param>
5: public void RemoveSystemLog(HttpContext context)
6: {
7: //清空三天前的日志
8: context.Response.Write(new SystemLogBLL().CearSystemLog());
9: }
10: /// <summary>
11: /// 獲取系統日志信息
12: /// </summary>
13: /// <param name="context"></param>
14: public void SearchSystemLog(HttpContext context)
15: {
16: //查詢條件
17: string key = context.Request["key"];
18: //分頁
19: int pageIndex = Convert.ToInt32(context.Request["pageIndex"]);
20: int pageSize = Convert.ToInt32(context.Request["pageSize"]);
21: //字段排序
22: String sortField = context.Request["sortField"];
23: String sortOrder = context.Request["sortOrder"];
24: string strCondition = "";
25: //對搜索內容進行驗證
26: if (!Common.Tools.IsValidInput(ref key, false))
27: {
28: return;
29: }
30: else
31: strCondition =SystemLogBLL.ConfirmCondition(key);//判斷查詢條件
32: SystemLogBLL bll = new SystemLogBLL();
33: //分頁數據讀取
34: IEnumerable<SystemLog> list = bll.ListByPagination(sortField, pageSize, pageIndex + 1, sortOrder == "asc" ? "0" : "1", strCondition);
35: //獲取總頁數
36: int totalPage = bll.GetCount(strCondition);
37: //JSON 序列化
38: string json = SystemLogBLL.MiniUiListToJson(list, totalPage, "");
39:
40:
41: context.Response.Write(json);
42: }
BLL主要操作:
這樣一個日志管理就完成了!
接下來,我們要做的就是一個關於網站信息的內容,主要是顯示這個網站信息,公司等等
基本上都是讀取數據庫信息,不過作為一個專業的網站,感覺這個其實很重要,雖然這是一個非常簡單的東西,不過這確是一個網站必須有的東西!
當然代碼就非常簡單了,主要就是讀取信息!
主要json數據生成:
1: /// <summary>
2: /// 關於網站信息的的json格式
3: /// </summary>
4: /// <param name="user"></param>
5: /// <returns></returns>
6: public static string OurWebInfoToJson(ourinfo Info)
7: {
8: //服務器名稱
9: string MachineName=HttpContext.Current.Server.MachineName;
10: //服務器ip
11: string LocalIp = HttpContext.Current.Request.ServerVariables["LOCAL_ADDR"];
12: //.net版本
13: string NetFramework = Environment.Version.ToString();
14: //操作系統版本
15: string OSVersion = Environment.OSVersion.ToString();
16: //iis版本
17: string IISVersion = HttpContext.Current.Request.ServerVariables["SERVER_SOFTWARE"];
18: //服務器端口
19: string ServerPort = HttpContext.Current.Request.ServerVariables["SERVER_PORT"];
20: //虛擬目錄絕對路徑
21: string RealDirectory = HttpContext.Current.Request.ServerVariables["APPL_PHYSICAL_PATH"];
22: //https支持
23: string SupportHttps = HttpContext.Current.Request.ServerVariables["HTTPS"];
24: //session總數
25: string SessionCount = HttpContext.Current.Session.Keys.Count.ToString();
26:
27: StringBuilder Json = new StringBuilder();
28: StringWriter sw = new StringWriter(Json);
29: using (JsonWriter jsonWriter = new JsonTextWriter(sw))
30: {
31:
32: jsonWriter.Formatting = Formatting.Indented;
33:
34: jsonWriter.WriteStartObject();
35: //網站信息
36: jsonWriter.WritePropertyName("MachineName");
37: jsonWriter.WriteValue(MachineName);
38: jsonWriter.WritePropertyName("LocalIp");
39: jsonWriter.WriteValue(LocalIp);
40: jsonWriter.WritePropertyName("NetFramework");
41: jsonWriter.WriteValue(NetFramework);
42: jsonWriter.WritePropertyName("OSVersion");
43: jsonWriter.WriteValue(OSVersion);
44: jsonWriter.WritePropertyName("IISVersion");
45: jsonWriter.WriteValue(IISVersion);
46: jsonWriter.WritePropertyName("ServerPort");
47: jsonWriter.WriteValue(ServerPort);
48: jsonWriter.WritePropertyName("RealDirectory");
49: jsonWriter.WriteValue(RealDirectory);
50: jsonWriter.WritePropertyName("SupportHttps");
51: jsonWriter.WriteValue(SupportHttps);
52: jsonWriter.WritePropertyName("SessionCount");
53: jsonWriter.WriteValue(SessionCount);
54:
55: //公司信息
56: jsonWriter.WritePropertyName("id");
57: jsonWriter.WriteValue(Info.Id);
58: jsonWriter.WritePropertyName("Name");
59: jsonWriter.WriteValue(Info.Name);
60: jsonWriter.WritePropertyName("Introduction");
61: jsonWriter.WriteValue(Info.Introduction);
62: jsonWriter.WritePropertyName("Representative");
63: jsonWriter.WriteValue(Info.Representative);
64: jsonWriter.WritePropertyName("Website");
65: jsonWriter.WriteValue(Info.Website);
66: jsonWriter.WritePropertyName("mobilephone");
67: jsonWriter.WriteValue(Info.mobilephone);
68: jsonWriter.WritePropertyName("Telephone");
69: jsonWriter.WriteValue(Info.Telephone);
70: jsonWriter.WritePropertyName("Email");
71: jsonWriter.WriteValue(Info.Email);
72: jsonWriter.WritePropertyName("qq");
73: jsonWriter.WriteValue(Info.qq);
74: jsonWriter.WritePropertyName("Zipcode");
75: jsonWriter.WriteValue(Info.Zipcode);
76: jsonWriter.WritePropertyName("Address");
77: jsonWriter.WriteValue(Info.Address);
78:
79: jsonWriter.WriteEndObject();
80:
81:
82: }
83: return Json.ToString();
84:
85: }
這樣就完成了,其實都是簡單的模塊,但是這些細節是網站一定要做的地方.以前,做東西,太粗糙,感覺拿不出手,很多東西不考慮!
一步一步學習,細節決定成敗!