一个可创建读取日志的管理类(可固定创建2M大小的日志文件)

这里,将日志管理基类命名为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()这一步。

你可能感兴趣的:(文件)