using NX_ModelClassLibrary.CustomEnum; using NX_ModelClassLibrary.LogCorrelationModel; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NX_LogClassLibrary { public static class LogHelper { private readonly static object thLock = new object(); #region 记录日志为文本文档形式 /// /// 记录日志类 /// /// 日志内容 /// 日志类型(Run:程序运行日志; Err:程序错误日志; DbErr:数据库异常相关日志; OPCRun:OPC运行日志; SocketRun:Socket运行日志; SocErr:Socket异常日志。) public static void WriteLog(string Txt, LogTypeEnum logType) { lock (thLock) { //获取日志存放位置,年份不同,存放文件夹不同。 string strDir = Environment.CurrentDirectory + "\\NX_CleanMac_Log\\" + DateTime.Now.ToString("yyyy") + "\\"; //获取时间,年月日。 string fileDate = DateTime.Now.ToString("yyyy-MM-dd"); //获取时间,年月。 string fileDate1 = DateTime.Now.ToString("yyyy-MM"); //每一年的不同月份日志放在不同的文件夹,同一月份不同类型的日志放于同一个文件夹。 string strDir1 = strDir + fileDate1 + "\\"; //每一年的相同月份不同日期的日志放在不同的文件夹 string strDir2 = strDir1 + fileDate + "\\"; //不同的日志名称,日志文件不同 string filePath = strDir2 + fileDate + "_" + logType + ".log"; string DateString = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); string Str = "发生时间:" + DateString + "|" + Txt + "\r\n"; WriteFile(strDir2, filePath, Str); } } /// /// 日志文件打印类 /// /// 日志文件存放的文件夹 /// 日志文件存放路径 /// 日志内容 private static void WriteFile(string strDir, string filePath, string txt) { FileStream fs = null; StreamWriter sw = null; try { if (!Directory.Exists(strDir))//如果日志文件存放的文件夹不存在,就新建一个文件夹。 { Directory.CreateDirectory(strDir); } if (File.Exists(filePath))//日志文件存放路径存在,向日志文件追加记录。 { fs = new FileStream(filePath, FileMode.Append); } else//日志文件存放路径不存在,创建日志文件。 { fs = new FileStream(filePath, FileMode.Create); } sw = new StreamWriter(fs); //开始写入 sw.Write(txt); //清空缓冲区 sw.Flush(); //关闭流 sw.Close(); fs.Close(); } catch (Exception) { ; } finally { if (sw != null) sw.Close(); if (fs != null) fs.Close(); } } #endregion #region 读日志 /// /// 生成文件信息 /// /// /// /// private static Tuple BuildLogFileName(DateTime date, LogTypeEnum logType) { string strDir = Environment.CurrentDirectory + "\\NX_CleanMac_Log\\" + date.ToString("yyyy") + "\\"; //获取时间,年月日。 string fileDate = date.ToString("yyyy-MM-dd"); //获取时间,年月。 string fileDate1 = date.ToString("yyyy-MM"); //每一年的不同月份日志放在不同的文件夹,同一月份不同类型的日志放于同一个文件夹。 string strDir1 = strDir + fileDate1 + "\\"; //每一年的相同月份不同日期的日志放在不同的文件夹 string strDir2 = strDir1 + fileDate + "\\"; //不同的日志名称,日志文件不同 string filePath = strDir2 + fileDate + "_" + logType + ".log"; return new Tuple(strDir2, filePath); } public static IEnumerable ReadLog(DateTime begindate, DateTime endDate, LogTypeEnum logType) { List logs = new List(); List strlogs = ReadLogFile(begindate, endDate, logType); foreach (string strLog in strlogs) { LogSearchMd log = LogSearchMd.Deserialize(strLog); logs.Add(log); } return logs; } /// /// 读取log文件 /// /// /// /// public static string[] ReadLogFile(DateTime date, LogTypeEnum logType) { string filename = BuildLogFileName(date, logType).Item2; if (!File.Exists(filename)) { return new string[] { }; } return File.ReadAllLines(filename); } /// /// 读取log文件 /// /// /// /// public static List ReadLogFile(DateTime begindate, DateTime endDate, LogTypeEnum logType) { DateTime _date = begindate.Date; DateTime _endDate = endDate.Date; List logs = new List(); while (_date <= _endDate) { string[] _logs = ReadLogFile(_date, logType); logs.AddRange(_logs); _date = _date.AddDays(1); } return logs; } #endregion } }