LogHelper.rar下载
最近在做系统的优化,但优化之前先得知道哪些地方有问题,耗费时间比较长,我们系统用服务层用的是WCF,现在对系统的某一个操作记录时间(包括客户端与服务器端,是在本机测试的),想法是写一个公共项目,客户端与服务器端都去引用它,然后记录时间(因为是在本机测试,所以客户端与服务器端时间是一致的),我想让客户端与服务器端所记录的时间都记录到一个文件中,这样我运行起来完之后,日志也生成完了。想法是这样的,代码如下:

2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.IO;
6
7 namespace 简单工厂模式
8 {
9 /// <summary>
10 /// 主要用于记录每个步骤所需的时间的。
11 /// </summary>
12 class LogHelper
13 {
14 //当你希望向一个新的文本文件内写入时,请调用WriteToLog(string msg, false),之后向同一个文件内写入时,不需要再指定路径。
15
16 /// <summary>
17 /// 要写入的文件名,若首次进入服务器时,请先将此Name设空。
18 /// </summary>
19 public static string FileName = "";
20
21 /// <summary>
22 /// 设置要写入的文件名
23 /// </summary>
24 private static void SetWriteFileName()
25 {
26 string name = System.DateTime.Now.ToString() + ".txt";
27 name = name.Replace('/', '_').Replace(':', '_').Replace(' ', '_');
28 //写入的文件(包含目录)
29 string logFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Tp\\linjs_Log\\" + name);
30 FileName = logFile;
31 }
32
33 /// <summary>
34 /// 写入文件
35 /// </summary>
36 /// <param name="msg">要写入的内容</param>
37 /// <param name="isNewFile">是否要写入新的文件</param>
38 public static void WriteToLog(string msg, bool isNewFile)
39 {
40 if (isNewFile) SetWriteFileName();
41 WriteToPublicInfo();
42 WriteToLog(msg);
43 }
44
45 /// <summary>
46 /// 写入文件
47 /// </summary>
48 /// <param name="msg">要写入的内容</param>
49 public static void WriteToLog(string msg)
50 {
51 if (string.IsNullOrEmpty(msg)) return;
52 if (string.IsNullOrEmpty(FileName))
53 {
54 //如果为空,则从NameInfo.txt中读取。
55 string str;
56 string logFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Tp\\linjs_Log\\NameInfo.txt");
57 StreamReader sr = new StreamReader(logFile, false);
58 str = sr.ReadLine().ToString();
59 sr.Close();
60 if (!string.IsNullOrEmpty(str))
61 {
62 FileName = str;
63 }
64 else
65 {
66 SetWriteFileName();
67 }
68 }
69
70 StreamWriter sw = new StreamWriter(FileName, true);
71 string text = msg + "【" + System.DateTime.Now.ToString() + "】";
72 sw.WriteLine(text);
73 sw.Close();
74 }
75
76 static void WriteToPublicInfo()
77 {
78 string logFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Tp\\linjs_Log\\NameInfo.txt");
79 StreamWriter sw = new StreamWriter(logFile, false);
80 sw.WriteLine(FileName);
81 sw.Close();
82 }
83 }
84 }
客户端调用:
就拿导入数据来说,它有以下几个步骤
1. 客户端从Excel中读取数据
2. 客户端处理读到的数据
3. 客户羰验证读到的数据是否合法
4. 服务器端向表中插入数据
5. 服务器端处理数据
6. 客户端刷新数据
你可以这样调用
LogHelper.WriteToLog("1. 客户端从Excel中读取数据 开始",true);//此处的true 表示创建一个新的文件。
LogHelper.WriteToLog("1. 客户端从Excel中读取数据 结束");
LogHelper.WriteToLog("2. 客户端处理读到的数据 开始");
LogHelper.WriteToLog("2. 客户端处理读到的数据 结束");
LogHelper.WriteToLog("3. 客户羰验证读到的数据是否合法 开始");
LogHelper.WriteToLog("3. 客户羰验证读到的数据是否合法 结束");
//此处是记录服务器端的时间,所以它也引用了LogHelper但,与客户端数据 不共享,所以需要做一些特殊处理
LogHelper.FileName = "";//这句就是做的特殊处理,你们看了代码就会懂的。
LogHelper.WriteToLog("4. 服务器端向表中插入数据 开始");
LogHelper.WriteToLog("4. 服务器端向表中插入数据 结束");
LogHelper.WriteToLog("5. 服务器端处理数据 开始");
LogHelper.WriteToLog("5. 服务器端处理数据 结束");
LogHelper.WriteToLog("6. 客户端刷新数据 开始");
LogHelper.WriteToLog("6. 客户端刷新数据 结束");
开始与结束之间放的就是你要测试的代码。