这里,将日志管理基类命名为LogManagerBase(抽象类),具体的不同类型的日志可以通过继承完成。该基类可将日志以每个2M的方式存储起来,并可以读取当前正在使用的日志的所有内容。
要实现该基类,首先要了解以下几个IO类:
命名空间:System.IO
相关类:Directory,DirectoryInfo,File,FileInfo,FileStream,StreamReader,StreamWriter
具体实现代码如下:
1 public abstract class LogManagerBase 2 { 3 public LogManagerBase(string _type) 4 { 5 this.logType = _type; 6 } 7 private string logPath = string.Empty; 8 /// <summary> 9 /// Local Folder to save logs,default is application(.exe) folder 10 /// </summary> 11 public string LogPath 12 { 13 get 14 { 15 if (logPath == string.Empty) 16 { 17 logPath = AppDomain.CurrentDomain.BaseDirectory+string.Format(@"Log\{0}\", LogType); 18 if (!Directory.Exists(logPath)) 19 Directory.CreateDirectory(logPath); 20 } 21 return logPath; 22 } 23 set { logPath = value; } 24 } 25 26 /// <summary> 27 /// a URL to store log temporarily 28 /// </summary> 29 public string TempURL 30 { 31 get { return LogPath + string.Format("temp_{0}.log",LogType); } 32 } 33 34 /// <summary> 35 /// type of Log 36 /// </summary> 37 private string logType; 38 public string LogType 39 { 40 get { return logType; } 41 } 42 43 /// <summary> 44 /// write record to current temp log 45 /// </summary> 46 /// <param name="_record"></param> 47 public void WriteLog(string _record) 48 { 49 FileInfo fileInfo=new FileInfo(TempURL); 50 51 if (fileInfo.Exists) 52 { 53 if (fileInfo.Length > 1024 * 1024 * 2) 54 { 55 string formalURL =string.Format(@"{0}{1}{2}.log", LogPath , DateTime.Now.ToString("yyyyMMddHHmmss") ,LogType); 56 File.Move(TempURL, formalURL); 57 } 58 } 59 else 60 { 61 using (FileStream fs = File.Create(TempURL)) 62 { 63 StreamWriter sw = new StreamWriter(fs); 64 sw.WriteLine(string.Format("{0} {1}", LogType, DateTime.Now.ToString("yyyyMMddHHmmss"))); 65 sw.WriteLine("--------------------------------------------------------------------------"); 66 sw.Flush(); 67 } 68 } 69 using (StreamWriter sw = File.AppendText(TempURL)) 70 { 71 sw.WriteLine(_record); 72 sw.Flush(); 73 } 74 } 75 /// <summary> 76 /// Read current temp log 77 /// </summary> 78 /// <returns></returns> 79 public string ReadLog() 80 { 81 FileInfo fileInfo = new FileInfo(TempURL); 82 if (!fileInfo.Exists) return null; 83 StreamReader sr = new StreamReader(TempURL); 84 string strLog = sr.ReadToEnd(); 85 sr.Close(); 86 //string strLog = File.ReadAllText(TempURL); 87 return strLog; 88 } 89 90 }
最后,讲下在敲代码时碰到的几个小问题:
1)如果当前不存在要保存的文件夹,请首先使用Directory进行创建,然后再把文件存在当前目录;(使用DirectoryInfo进行查看路径是否存在)
2)ReadLog()返回字符串时,请注意字符串中是否含有’\0‘,如果有的话,哪怕返回的是所有数据行,但string类型也只会显示到第一个‘\0’之前的信息;
3)日志文件比较大的情况下,请使用StreamReader类读写(参考msdn文档);
4)使用StreamWriter时,请注意最后StreamWriter.Flush()这一步。
时间: 2024-11-23 04:56:54