C#日志类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#日志类相关的知识,希望对你有一定的参考价值。

 

日志在我们日常程序中是非常容易触及到的东西,当然我们在程序中可以用很多种方式来记录。

在C#中我们可以用log4net.dll,也可以利用IO将记录写入文件。


 

作用:

  1. 记录用户的操作
  2. 记录程序中的异常,我们可以捕获到很多有用的东西
  3. 为数据分析提供依据

这篇文章给了我们写日志非常好的建议:http://blog.jobbole.com/52018/


 

下面是我在项目经常用到的一个log类,

技术分享
 1 /// <summary>
 2 ///Log 的摘要说明
 3 /// </summary>
 4 public class Log
 5 {
 6     private string PathName;
 7     private string FileName;
 8 
 9     /// <summary>
10     /// 构造 Log
11     /// </summary>
12     /// <param name="pathname">相对于网站根目录 App_Log 目录的相对路径,如: System, 就相当于 ~/App_Log/System/</param>
13     public Log(string pathname)
14     {
15         if (String.IsNullOrEmpty(pathname))
16         {
17             throw new Exception("没有初始化 Log 类的 PathName 变量");
18         }
19 
20         PathName = System.AppDomain.CurrentDomain.BaseDirectory + "App_Log/" + pathname;
21 
22         if (!Directory.Exists(PathName))
23         {
24             try
25             {
26                 Directory.CreateDirectory(PathName);
27             }
28             catch { }
29         }
30 
31         if (!Directory.Exists(PathName))
32         {
33             PathName = System.AppDomain.CurrentDomain.BaseDirectory + "App_Log";
34 
35             if (!Directory.Exists(PathName))
36             {
37                 try
38                 {
39                     Directory.CreateDirectory(PathName);
40                 }
41                 catch { }
42             }
43 
44             if (!Directory.Exists(PathName))
45             {
46                 PathName = System.AppDomain.CurrentDomain.BaseDirectory;
47             }
48         }
49 
50         FileName = PathName + "/" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";
51     }
52 
53     public void Write(string Message)
54     {
55         if (String.IsNullOrEmpty(FileName))
56         {
57             return;
58         }
59 
60         using (FileStream fs = new FileStream(FileName, FileMode.Append, FileAccess.Write, FileShare.Write))
61         {
62             StreamWriter writer = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GBK"));
63 
64             try
65             {
66                 writer.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + System.DateTime.Now.Millisecond.ToString() + "\\t\\t" + Message + "\\r\\n");
67             }
68             catch { }
69 
70             writer.Close();
71         }
72     }
73 
74     public void WriteIni(string Message)
75     {
76         WriteIni("Log", Message);
77     }
78 
79     public void WriteIni(string Section, string Message)
80     {
81         if (String.IsNullOrEmpty(FileName))
82         {
83             return;
84         }
85 
86         Shove._IO.IniFile ini = new Shove._IO.IniFile(FileName);
87 
88         ini.Write(Section, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + System.DateTime.Now.Millisecond.ToString(), Message);
89     }
90 }
View Code

当然我们也可以利用log4net.dll来配置,将一些记录写入到数据库中

demo地址 http://files.cnblogs.com/files/QDF-/log4_demo.rar

以上是关于C#日志类的主要内容,如果未能解决你的问题,请参考以下文章

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

是否可以动态编译和执行 C# 代码片段?

C#常用代码片段备忘

[原创]分享一个轻量级日志类

优化 C# 代码片段、ObservableCollection 和 AddRange

argparse 代码片段只打印部分日志