LogHelper.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. using NX_ModelClassLibrary.CustomEnum;
  2. using NX_ModelClassLibrary.LogCorrelationModel;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace NX_LogClassLibrary
  10. {
  11. public static class LogHelper
  12. {
  13. private readonly static object thLock = new object();
  14. #region 记录日志为文本文档形式
  15. /// <summary>
  16. /// 记录日志类
  17. /// </summary>
  18. /// <param name="Txt">日志内容</param>
  19. /// <param name="logType">日志类型(Run:程序运行日志; Err:程序错误日志; DbErr:数据库异常相关日志; OPCRun:OPC运行日志; SocketRun:Socket运行日志; SocErr:Socket异常日志。)</param>
  20. public static void WriteLog(string Txt, LogTypeEnum logType)
  21. {
  22. lock (thLock)
  23. {
  24. //获取日志存放位置,年份不同,存放文件夹不同。
  25. string strDir = Environment.CurrentDirectory + "\\NX_CleanMac_Log\\" + DateTime.Now.ToString("yyyy") + "\\";
  26. //获取时间,年月日。
  27. string fileDate = DateTime.Now.ToString("yyyy-MM-dd");
  28. //获取时间,年月。
  29. string fileDate1 = DateTime.Now.ToString("yyyy-MM");
  30. //每一年的不同月份日志放在不同的文件夹,同一月份不同类型的日志放于同一个文件夹。
  31. string strDir1 = strDir + fileDate1 + "\\";
  32. //每一年的相同月份不同日期的日志放在不同的文件夹
  33. string strDir2 = strDir1 + fileDate + "\\";
  34. //不同的日志名称,日志文件不同
  35. string filePath = strDir2 + fileDate + "_" + logType + ".log";
  36. string DateString = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
  37. string Str = "发生时间:" + DateString + "|" + Txt + "\r\n";
  38. WriteFile(strDir2, filePath, Str);
  39. }
  40. }
  41. /// <summary>
  42. /// 日志文件打印类
  43. /// </summary>
  44. /// <param name="strDir">日志文件存放的文件夹</param>
  45. /// <param name="filePath">日志文件存放路径</param>
  46. /// <param name="txt">日志内容</param>
  47. private static void WriteFile(string strDir, string filePath, string txt)
  48. {
  49. FileStream fs = null;
  50. StreamWriter sw = null;
  51. try
  52. {
  53. if (!Directory.Exists(strDir))//如果日志文件存放的文件夹不存在,就新建一个文件夹。
  54. {
  55. Directory.CreateDirectory(strDir);
  56. }
  57. if (File.Exists(filePath))//日志文件存放路径存在,向日志文件追加记录。
  58. {
  59. fs = new FileStream(filePath, FileMode.Append);
  60. }
  61. else//日志文件存放路径不存在,创建日志文件。
  62. {
  63. fs = new FileStream(filePath, FileMode.Create);
  64. }
  65. sw = new StreamWriter(fs);
  66. //开始写入
  67. sw.Write(txt);
  68. //清空缓冲区
  69. sw.Flush();
  70. //关闭流
  71. sw.Close();
  72. fs.Close();
  73. }
  74. catch (Exception)
  75. {
  76. ;
  77. }
  78. finally
  79. {
  80. if (sw != null)
  81. sw.Close();
  82. if (fs != null)
  83. fs.Close();
  84. }
  85. }
  86. #endregion
  87. #region 读日志
  88. /// <summary>
  89. /// 生成文件信息
  90. /// </summary>
  91. /// <param name="date"></param>
  92. /// <param name="logType"></param>
  93. /// <returns></returns>
  94. private static Tuple<string, string> BuildLogFileName(DateTime date, LogTypeEnum logType)
  95. {
  96. string strDir = Environment.CurrentDirectory + "\\NX_CleanMac_Log\\" + date.ToString("yyyy") + "\\";
  97. //获取时间,年月日。
  98. string fileDate = date.ToString("yyyy-MM-dd");
  99. //获取时间,年月。
  100. string fileDate1 = date.ToString("yyyy-MM");
  101. //每一年的不同月份日志放在不同的文件夹,同一月份不同类型的日志放于同一个文件夹。
  102. string strDir1 = strDir + fileDate1 + "\\";
  103. //每一年的相同月份不同日期的日志放在不同的文件夹
  104. string strDir2 = strDir1 + fileDate + "\\";
  105. //不同的日志名称,日志文件不同
  106. string filePath = strDir2 + fileDate + "_" + logType + ".log";
  107. return new Tuple<string, string>(strDir2, filePath);
  108. }
  109. public static IEnumerable<LogSearchMd> ReadLog(DateTime begindate, DateTime endDate, LogTypeEnum logType)
  110. {
  111. List<LogSearchMd> logs = new List<LogSearchMd>();
  112. List<string> strlogs = ReadLogFile(begindate, endDate, logType);
  113. foreach (string strLog in strlogs)
  114. {
  115. LogSearchMd log = LogSearchMd.Deserialize(strLog);
  116. logs.Add(log);
  117. }
  118. return logs;
  119. }
  120. /// <summary>
  121. /// 读取log文件
  122. /// </summary>
  123. /// <param name="date"></param>
  124. /// <param name="logType"></param>
  125. /// <returns></returns>
  126. public static string[] ReadLogFile(DateTime date, LogTypeEnum logType)
  127. {
  128. string filename = BuildLogFileName(date, logType).Item2;
  129. if (!File.Exists(filename))
  130. {
  131. return new string[] { };
  132. }
  133. return File.ReadAllLines(filename);
  134. }
  135. /// <summary>
  136. /// 读取log文件
  137. /// </summary>
  138. /// <param name="date"></param>
  139. /// <param name="logType"></param>
  140. /// <returns></returns>
  141. public static List<string> ReadLogFile(DateTime begindate, DateTime endDate, LogTypeEnum logType)
  142. {
  143. DateTime _date = begindate.Date;
  144. DateTime _endDate = endDate.Date;
  145. List<string> logs = new List<string>();
  146. while (_date <= _endDate)
  147. {
  148. string[] _logs = ReadLogFile(_date, logType);
  149. logs.AddRange(_logs);
  150. _date = _date.AddDays(1);
  151. }
  152. return logs;
  153. }
  154. #endregion
  155. }
  156. }