C# 类静态实例日志方法

关键字:日志操作、类静态实例

今日主旋律是bug。  先是udp的异步接收bug。再是一个每当日期变更NMonitorSystem程序崩溃的bug。不过还好.net的异常系统事件可以捕捉到即使没有代码也可以定位到错误源。顺便说一句很多时候.net异常很难确定,即使进入调试没源码看到的也只是汇编代码很难定位异常。这时候才发现debug程序的意义。

  这个异常出现很奇葩,1是因为这个库用了4年了再很多项目中用到,甚至之前的银行程序。2出现的条件是刚好在日期变化是需要日志记录捕捉的程序异常。3log普通的异常没有调用到之前。

      Logger类代码(修改日期变更bug)

  1 using System;
  2 using System.IO;
  3 using System.Configuration;
  4 
  5 namespace KS.Global
  6 {
  7     /// <summary>
  8     /// Logger 的摘要说明。
  9     /// 仅可使用DB、Comm和默认log实例
 10     /// </summary>
 11     public class Logger
 12     {
 13         //定义不同类型日志对象
 14         //主业务流程日志
 15         private static Logger Steplogger = null;
 16         //控件日志
 17         private static Logger Controllogger = null;
 18         //通信日志
 19         private static Logger Commlogger = null;
 20         //业务组件日志:记录功能函数实现情况
 21         private static Logger Codelogger = null;
 22         //后台数据日志
 23         private static Logger Datalogger = null;
 24         //监控业务日志
 25         private static Logger Monitorlogger = null;
 26         //流水日志
 27         private static Logger Journallogger = null;
 28         //脚本日志
 29         private static Logger Scriptlogger = null;
 30         private static Logger logger = null;
 31         private string filePath = ""; //用来记录当前日志文件
 32         private StreamWriter sw = null;
 33         private bool recordLog = false;
 34         private string datetime = null;
 35         private string logname = "";
 36 
 37         private Logger() //禁止直接创建实例
 38         {
 39         }
 40 
 41         public void close() //关闭日志,释放资源
 42         {
 43             try
 44             {//如果前面的日志还没关闭,则关闭
 45                 this.sw.Close();
 46             }
 47             catch (Exception e)
 48             {
 49                 Console.WriteLine(e);
 50             }
 51         }
 52         private const int DEBUG = 0;
 53         private const int WARNING = 1;
 54         private const int ERROR = 2;
 55         private const int INFO = 3;
 56         /**
 57          * 记录日志级别
 58          * 0 DEBUG
 59          * 1 WARNING
 60          * 2 ERROR
 61          * 3 INFO
 62          * 如果需要更改记录日志的级别,只需要修改本字段的取值即可
 63          **/
 64         private int level = 0;
 65         /**
 66          * 获取日志类实例
 67          **/
 68         public static Logger getLogger()
 69         {
 70             if (logger == null)
 71             {
 72                 logger = new Logger();
 73                 //                string recordlogvalue =ConfigurationSettings.AppSettings["RecordLog"];
 74                 //                if (recordlogvalue.ToUpper().Equals("YES")) 
 75                 //                {
 76                 //                    logger.recordLog = true;
 77                 //                }
 78                 //                else 
 79                 //                {
 80                 //                    logger.recordLog = false;
 81                 //                }
 82 
 83                 logger.recordLog = true;
 84                 logger.datetime = DateTime.Now.ToString("u").Substring(0, 10);
 85                 string sDir = UtilTool.GetExecutePath();
 86                 logger.config(sDir + "LOG\\" + logger.datetime + ".log");
 87             }
 88             return logger;
 89         }
 90         /// <summary>
 91         /// 日志分类型,分别new不同类型对象
 92         /// </summary>
 93         /// <param name="LogType"></param>
 94         /// <returns></returns>
 95         public static Logger getLogger(string LogType)
 96         {
 97             switch (LogType)
 98             {
 99 
100                 case "Control":
101                     {
102                         if (Controllogger == null)
103                         {
104                             Controllogger = new Logger();
105                             Controllogger.recordLog = true;
106                             Controllogger.datetime = DateTime.Now.ToString("u").Substring(0, 10);
107                             string sDir = UtilTool.GetExecutePath();
108                             string path = sDir + "LOG\\" + LogType;
109                             if (!Directory.Exists(path))
110                             {
111                                 Directory.CreateDirectory(path);
112                             }
113                             Controllogger.config(path + "\\" + Controllogger.datetime + ".log");
114                         }
115                         return Controllogger;
116                     }
117                 case "Step":
118                     {
119                         if (Steplogger == null)
120                         {
121                             Steplogger = new Logger();
122                             Steplogger.recordLog = true;
123                             Steplogger.datetime = DateTime.Now.ToString("u").Substring(0, 10);
124                             string sDir = UtilTool.GetExecutePath();
125                             string path = sDir + "LOG\\" + LogType;
126                             if (!Directory.Exists(path))
127                             {
128                                 Directory.CreateDirectory(path);
129                             }
130                             Steplogger.config(path + "\\" + Steplogger.datetime + ".log");
131                         }
132                         return Steplogger;
133                     }
134 
135                 case "Script":
136                     {
137                         if (Scriptlogger == null)
138                         {
139                             Scriptlogger = new Logger();
140                             Scriptlogger.recordLog = true;
141                             Scriptlogger.datetime = DateTime.Now.ToString("u").Substring(0, 10);
142                             string sDir = UtilTool.GetExecutePath();
143                             string path = sDir + "LOG\\" + LogType;
144                             if (!Directory.Exists(path))
145                             {
146                                 Directory.CreateDirectory(path);
147                             }
148                             Scriptlogger.config(path + "\\" + Scriptlogger.datetime + ".log");
149                         }
150                         return Scriptlogger;
151                     }
152                 case "Code":
153                     {
154                         if (Codelogger == null)
155                         {
156                             Codelogger = new Logger();
157                             Codelogger.recordLog = true;
158                             Codelogger.datetime = DateTime.Now.ToString("u").Substring(0, 10);
159                             string sDir = UtilTool.GetExecutePath();
160                             string path = sDir + "LOG\\" + LogType;
161                             if (!Directory.Exists(path))
162                             {
163                                 Directory.CreateDirectory(path);
164                             }
165                             Codelogger.config(path + "\\" + Codelogger.datetime + ".log");
166                         }
167                         return Codelogger;
168                     }
169                 case "DB":
170                     {
171                         if (Datalogger == null)
172                         {
173                             Datalogger = new Logger();
174                             Datalogger.recordLog = true;
175                             Datalogger.datetime = DateTime.Now.ToString("u").Substring(0, 10);
176                             string sDir = UtilTool.GetExecutePath();
177                             string path = sDir + "LOG\\" + LogType;
178                             
179                             if (!Directory.Exists(path))
180                             {
181                                 Directory.CreateDirectory(path);
182                             }
183                             Datalogger.config(path + "\\" + Datalogger.datetime + ".log");
184                         }
185                         return Datalogger;
186                     }
187                 case "Monitor":
188                     {
189                         if (Monitorlogger == null)
190                         {
191                             Monitorlogger = new Logger();
192                             Monitorlogger.recordLog = true;
193                             Monitorlogger.datetime = DateTime.Now.ToString("u").Substring(0, 10);
194                             string sDir = UtilTool.GetExecutePath();
195                             string path = sDir + "LOG\\" + LogType;
196                             if (!Directory.Exists(path))
197                             {
198                                 Directory.CreateDirectory(path);
199                             }
200                             Monitorlogger.config(path + "\\" + Monitorlogger.datetime + ".log");
201                         }
202                         return Monitorlogger;
203                     }
204                 case "Journal":
205                     {
206                         if (Journallogger == null)
207                         {
208                             Journallogger = new Logger();
209                             Journallogger.recordLog = true;
210                             Journallogger.datetime = DateTime.Now.ToString("u").Substring(0, 10);
211                             string sDir = UtilTool.GetExecutePath();
212                             string path = sDir + "LOG\\" + LogType;
213                             if (!Directory.Exists(path))
214                             {
215                                 Directory.CreateDirectory(path);
216                             }
217                             Journallogger.config(path + "\\" + Journallogger.datetime + ".log");
218                         }
219                         return Journallogger;
220                     }
221                 case "Comm":
222                     {
223                         if (Commlogger == null)
224                         {
225                             Commlogger = new Logger();
226                             Commlogger.recordLog = true;
227                             Commlogger.datetime = DateTime.Now.ToString("u").Substring(0, 10);
228                             string sDir = UtilTool.GetExecutePath();
229                             string path = sDir + "LOG\\" + LogType;
230                             if (!Directory.Exists(path))
231                             {
232                                 Directory.CreateDirectory(path);
233                             }
234                             Commlogger.config(path + "\\" + Commlogger.datetime + ".log");
235                         }
236                         return Commlogger;
237                     }
238                 default:
239                     {
240                         getLogger();
241                         return logger;
242                     }
243             }
244 
245         }
246 
247         /**
248          * 配置日志路径及级别
249          * 由本方法关闭前面的日志并打开新日志
250          **/
251         public void config(string filePath)
252         {
253             try
254             {//如果前面的日志还没关闭,则关闭
255                 if(sw!= null)
256                     this.sw.Close();
257             }
258             catch (Exception e)
259             {
260             }
261 
262             this.level = level;
263             this.filePath = filePath;
264 
265             try
266             {
267                 this.sw = new StreamWriter(this.filePath, true, System.Text.Encoding.Default);
268                 this.sw.WriteLine();
269             }
270             catch (Exception e)
271             {
272                 Console.WriteLine(e);
273                 //日志文件打开失败,放弃日志
274             }
275         }
276 
277         /**
278          * 写日志的基础方法
279          * 如果要改为写数据库或者其它流,只需更改本方法
280          **/
281         private void log(string strLog)
282         {
283             if (this.sw != null)
284             {
285                 string now = DateTime.Now.ToString("u").Substring(0, 10);
286                 if (!now.Equals(datetime))
287                 {
288                     ///日期发生变化,重新打开新文件,记录日志
289                     ///
290                     datetime = now;
291                     string sDir = UtilTool.GetExecutePath();
292                     if (logger != null)
293                         logger.config(sDir + "LOG\\" + datetime + ".log");
294                     if (Datalogger != null)
295                         Datalogger.config(sDir + "LOG\\DB\\" + datetime + ".log");
296                     if (Commlogger != null)
297                         Commlogger.config(sDir + "LOG\\Comm\\" + datetime + ".log");
298                 }
299                 this.sw.WriteLine(DateTime.Now.ToString() + " - " + strLog);
300                 this.sw.Flush();
301             }
302         }
303 
304         /**
305          * 写日志
306          **/
307         public void debug(string strLog)
308         {
309 
310             if (this.level <= Logger.DEBUG && this.recordLog)
311             {
312                 this.log("debug: " + strLog);
313             }
314         }
315         public void error(string strLog)
316         {
317             if (this.level <= Logger.ERROR && this.recordLog)
318             {
319                 this.log("error: " + strLog);
320             }
321         }
322         public void info(string strLog)
323         {
324             if (this.level <= Logger.INFO && this.recordLog)
325             {
326                 this.log("infor: " + strLog);
327             }
328         }
329         public void warning(string strLog)
330         {
331             if (this.level <= Logger.WARNING && this.recordLog)
332             {
333                 this.log("warning: " + strLog);
334             }
335         }
336 
337         public void debugUploadError(string strLog)
338         {
339             // System.Windows.Forms.MessageBox.Show(strLog);
340             if (this.level <= Logger.DEBUG && this.recordLog)
341             {
342                 this.log("debug: " + strLog);
343             }
344         }
345     }
346 }

调用示例:

 1         private void btn_db_Click(object sender, EventArgs e)
 2         {
 3             Logger.getLogger("DB").debug("this is a test click");
 4         }
 5 
 6         private void btn_com_Click(object sender, EventArgs e)
 7         {
 8             Logger.getLogger("Comm").debug("this is a test click");
 9         }
10 
11         private void btn_log_Click(object sender, EventArgs e)
12         {
13             Logger.getLogger().debug("this is a test click");
14         }

 

posted @ 2015-05-13 21:32  beeshow00  阅读(590)  评论(0编辑  收藏  举报