File 与 Log #1----ASP.NET的档案与I/O Stream(为系统记录Log文件)
http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/19/4034.aspx
本文范例已经收录在书本的「第十七章 资料流 与 I/O」!
档案的应用,在程序设计上一直是个重点。虽然有了数据库帮我们纪录数据,但有些小数据不需要劳师动众、也不必存放太久,如果用一个文字文件来记录,反而更简单。
举例来说,尚未上线的系统、或是有些功能繁杂的程序要撰写。我们就可以利用档案的功能来做纪录。一边测试一边记录这些程序在各阶段的运作状况,每个阶段成功与否都可以直接写入文字文件里面,不需要跟数据库抢资源、抢联机。毕竟小档案I/O的速度,一般来说都快过数据库。
以前我做过B2B的案子,用Rosettanet XML来传递数据(关于Rosettanet,请看中文网站的说明,http://www.rosettanettaiwan.org.tw/)。当时用的技术是 VB 6.0+ ASP + MS BizTalk Server + MS SQL Server 2000。
依照实际的状况,我们会同时用「档案」与「数据库」来记录这些流程。底下的五大步骤,前三项都会用文字文件做纪录,因为这些小资料是自己Debug(除错)用的,往往是系统出问题才会去察看,也不太有保留的价值,所以我们采用文字文件来记录。
1. 程序定时启动(例如:每五分钟启动一次),并开始记录处理流程。
2. 从数据库搜寻数据。符合条件的纪录就捞出来,组合成XML档案。
(执行时间与XML档案都会存成文字文件,存在专有的目录底下)
3. 将XML档案,转换成 Rosettanet格式。
(执行时间与Rosettanet XML档案都会存盘,放在专有的目录底下)
4. 交给 Server准备发送。此时,就会用数据表来记录时间与相关数据了。
5. 传送给对方的Server。对方收到后,我们也会把时间记录在数据表里面。
批注:后面两个流程要用数据表来做纪录,是为了给客户与主管查验,日后也能统计与分析我们这套B2B系统的发送成功率等等。
除了大型的系统、复杂的程序需要做Log纪录文件之外,网站常用的「访客计数器」,也可以用档案的方式来控管。可见存取档案的用法,真的很多样化。
以下是发表的新书内容: 本文范例已经收录在书本的「第十七章 资料流 与 I/O」!
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)
Q:每一天都用一个档案,用来记录当天每支程序内部的执行状况。
以下是相关的规范:
1. 档案统一放在 C:\MIS2000Lab_ASP.NET_Log目录底下。
2. 每一天都用一个单独的子目录,子目录名称就是当天日期。
3. 档名必须是以当天日期为名,扩展名是.log,例如:20081231.log。
4. 档案内每一段讯息,都要记录完整的日期与时间(年/月/日/时/分/秒)。
每段讯息各自独立一行,格式如下:
[2008/04/0114:00:33] Message: 错误讯息XXXYYY
5. 档案内的文字,采用 Big5正体中文来编码。
记录档案的后置程序代码如下,其实不难,大部分都学过了。
01 Dim myLog_Msg As String
02
03 Dim myLog_FileName As String = System.DateTime.Now.ToString("yyyyMMdd")
04
05 '-- 以日期当作文件名,一天记录一个档案。
06
07
08
09
10
11 Try
12
13
14
15 Dim my_Dir As String = "c:\MIS2000Lab_ASP.NET_Log\" & System.DateTime.Now.ToString("yyyyMMdd")
16
17 If Not Directory.Exists(my_Dir) Then
18
19 Directory.CreateDirectory(my_Dir) '--如果这目录不存在,就建立它。
20
21 End If
22
23
24
25
26
27 Dim strRecord As String =
28
29
30 System.String.Format("[{0:yyyy/MM/dd hh:mm:ss}]Message : {1}", System.DateTime.Now, my_LogMsg.Trim())
31
32 '--每一段讯息,都要记录完整的日期与时间(年/月/日/时/分/秒)。
33
34 Dim LogFile As String = my_Dir & "\" & myLog_FileName + ".log"
35
36 '--每一个纪录文件的扩展名都是 .log
37
38
39
40
41
42 Dim sw As New StreamWriter(LogFile, True, System.Text.Encoding.GetEncoding("BIG5"))
43
44 '--第一个参数,档名。
45
46 '--第二个参数,是否采用APPEND的方式?表示新的资料,会附加在档案末端。
47
48 '--第三个参数,正体中文编码 System.Text.Encoding.GetEncoding("BIG5"),默认值UTF-8。
49
50 sw.WriteLine(strRecord)
51
52
53
54
55
56 sw.Flush()
57
58
59
60 sw.Close()
61
62 sw.Dispose()
63
64 Catch ex As Exception
65
66 ex.Message.ToString()
67
68 End Try
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)
后续还有两个衍生的范例.......有机会再公开
本文范例已经收录在书本的「第十七章 资料流 与 I/O」!
..........................................................................................
相关文章,请看这一篇----FileUpload控件,档案上传
....................................................................................................寄信给我 mis2000lab (at)雅虎.com.台湾 ........
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)