LogClass.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. using System;
  2. using System.Diagnostics;
  3. using System.IO;
  4. using System.Text;
  5. namespace LogClass
  6. {
  7. public class LOG
  8. {
  9. static public StringBuilder _log = new StringBuilder();
  10. static FileIO fio;
  11. static public int min = 0;
  12. static public int max = 10;
  13. //
  14. static LOG()
  15. {
  16. fio = new FileIO();
  17. fio.OpenWriteFile("log.txt");
  18. }
  19. static public void error(object str)
  20. {
  21. log("Erorr:" + str, 10);
  22. }
  23. //static object syn = new object();
  24. /// <summary>
  25. /// log写入
  26. /// </summary>
  27. /// <param name="str"></param>
  28. static public void log(object str)
  29. {
  30. log(str, 0);
  31. }
  32. static public void log(string str)
  33. {
  34. log(str, 0);
  35. }
  36. /// <summary>
  37. /// log等级定制
  38. /// </summary>
  39. /// <param name="p"></param>
  40. /// <param name="level"></param>
  41. public static void log(object p, int level)
  42. {
  43. log(p.ToString(), level);
  44. }
  45. static public void log(string str, int level)
  46. {
  47. if(level < fio.LogLevel)
  48. {
  49. return;
  50. }
  51. if (str == null)
  52. {
  53. str = "null";
  54. }
  55. fio.WriteLine(DateTime.Now.ToString("O") + "->" + str + "\r\n");
  56. }
  57. /// <summary>
  58. /// 修改Log的限制等级0日志最多,10最少
  59. /// </summary>
  60. /// <param name="Loglevel"></param>
  61. public static void ChangeLogLevel(int Loglevel)
  62. {
  63. fio.LogLevel = Loglevel;
  64. }
  65. public static void LogSurPlusMemory()
  66. {
  67. PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes");
  68. var ramAvailable = ramCounter.NextValue();
  69. string ramAvaiableStr = string.Format("{0} MB", ramAvailable);
  70. log($"剩余物理内存:{ramAvaiableStr}");
  71. }
  72. }
  73. public class FileIO
  74. {
  75. private FileStream fsr;
  76. private FileStream fsw;
  77. private StreamWriter sw;
  78. private StreamReader sr;
  79. private string LogFloderPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Log\\";
  80. private double LogFileSize =128 * Math.Pow(1024, 3);
  81. public int LogLevel = 5;
  82. // 创建用于读取文件行的文件流和StreamWriter对象
  83. public void OpenReadFile(string file)
  84. {
  85. if (!File.Exists(file))
  86. File.Create(file).Close();
  87. fsr = new FileStream(file, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite);
  88. sr = new StreamReader(fsr);
  89. }
  90. public void Clear()
  91. {
  92. CloseWriteFile();
  93. }
  94. // 关闭读文件流
  95. public void CloseReadFile()
  96. {
  97. if (fsr != null)
  98. fsr.Close();
  99. }
  100. // 创建用于向文件中追加行的文件流和StreamWriter对象
  101. public void OpenWriteFile(string file)
  102. {
  103. int i = 1;
  104. while(true)
  105. {
  106. if (!Directory.Exists(LogFloderPath))//如果不存在就创建file文件夹
  107. {
  108. Directory.CreateDirectory(LogFloderPath);
  109. }
  110. if (!File.Exists(LogFloderPath + file)) // 如果文件不存在,先创建这个文件
  111. File.Create(LogFloderPath + file).Close();
  112. // 以追加模式打开这个文件
  113. fsw = new FileStream(LogFloderPath + file, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
  114. if (fsw.Length > LogFileSize)
  115. {
  116. file = "log"+ i + ".txt";
  117. i++ ;
  118. continue;
  119. }
  120. break;
  121. }
  122. // 根据创建的FileStream对象来创建StreamWriter对象
  123. sw = new StreamWriter(fsw);
  124. }
  125. // 关闭写文件流
  126. public void CloseWriteFile()
  127. {
  128. if (fsw != null)
  129. fsw.Close();
  130. }
  131. // 从文件中读取一行
  132. public string ReadLine()
  133. {
  134. if (sr.EndOfStream) // 如果文件流指针已经指向文件尾部,返回null
  135. return null;
  136. return sr.ReadLine();
  137. }
  138. // 向文件中追加一行字符串
  139. public void WriteLine(string s)
  140. {
  141. if(fsw.Length > LogFileSize)
  142. {
  143. OpenWriteFile("log.txt");
  144. }
  145. lock (sw)
  146. {
  147. sw.WriteLine(s);
  148. sw.Flush(); // 刷新写入缓冲区,使这一行对于读文件流可见
  149. }
  150. }
  151. // 用于判断文件流指针是否位于文件尾部
  152. public bool IsEof()
  153. {
  154. return sr.EndOfStream;
  155. }
  156. }
  157. }