123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace FileManager
- {
- public class LogManager
- {
- #region 定义属性
- private static string filePath = string.Empty;
- /// <summary>
- /// 存储路径
- /// </summary>
- protected static string FilePath { get => filePath; set => filePath = value; }
- /// <summary>
- /// 运行状态
- /// </summary>
- private static bool runState = false;
- protected static bool RunState { get => runState; set => runState = value; }
- /// <summary>
- /// 日志名称,按照当前时间生成
- /// </summary>
- protected string LogName { get => logName; set => logName = value; }
- /// <summary>
- /// 硬件日志文件路径
- /// </summary>
- protected static string HardwareLogPath { get => hardwareLogPath; set => hardwareLogPath = value; }
- //默认日志路径
- private static string defaultPath = @"\Log\";
- //硬件日志文件路径
- private static string hardwareLogPath = string.Empty;
- //硬件日志名称
- private static string logName = string.Empty;
- #endregion
- #region 初始化创建日志文件
- /// <summary>
- /// 初始化日志文件,如不存在根据xml路径创建
- /// </summary>
- /// <param name="xmlFilePath">xml存储位置</param>
- public static void Init(string xmlFilePath)
- {
- CreateFile(xmlFilePath);
- }
- /// <summary>
- /// 初始化记录硬件操作日志文件,默认创建日志文件
- /// </summary>
- public static void InitManulLog()
- {
- //硬件日志名称
- logName = DateTime.Now.ToString("yyyyMMddHHmmss") + "ManulLog.txt";
- CreateHardwareFile(logName);
- }
- /// <summary>
- /// 初始化记录硬件操作日志文件,默认创建日志文件
- /// </summary>
- public static void InitHardwareLog()
- {
- //硬件日志名称
- logName = DateTime.Now.ToString("yyyyMMddHHmmss")+ "HardwareLog.txt";
- CreateHardwareFile(logName);
- }
- #endregion
- #region 添加记录日志
- /// <summary>
- /// 记录运行日志
- /// </summary>
- /// <param name="logContent">日志运行内容</param>
- public static void LogTrace(string logContent)
- {
- //获取调用当前方法的页面与代码行数
- StackTrace st = new StackTrace(new StackFrame(1, true));
- StackFrame sf = st.GetFrame(0);
- //文件名称
- string FileName = sf.GetFileName();
- //方法名
- string MethodName = sf.GetMethod().Name;
- //行号
- int LineNumber = sf.GetFileLineNumber();
- //设置运行状态
- RunState = true;
- st = null;
-
- LogWrite(FileName, MethodName, LineNumber, logContent, RunState);
- }
- /// <summary>
- /// 记录错误日志
- /// </summary>
- /// <param name="logErrorContent">日志错误内容</param>
- public static void LogError(string logErrorContent)
- {
- //获取调用当前方法的页面与代码行数
- StackTrace st = new StackTrace(new StackFrame(1, true));
- StackFrame sf = st.GetFrame(0);
- //文件名称
- string FileName = sf.GetFileName();
- //方法名
- string MethodName = sf.GetMethod().Name;
- //行号
- int LineNumber = sf.GetFileLineNumber();
- //设置运行状态
- RunState = false;
- st = null;
- LogWrite(FileName, MethodName, LineNumber, logErrorContent, RunState);
- }
- /// <summary>
- /// 添加硬件运行日志
- /// </summary>
- /// <param name="logContent">日志内容</param>
- /// <param name="logState">True:正常日志 False:错误日志</param>
- public static void AddHardwareLog(string logContent,bool logState)
- {
- //获取调用当前方法的页面与代码行数
- StackTrace st = new StackTrace(new StackFrame(1, true));
- StackFrame sf = st.GetFrame(0);
- //文件名称
- string FileName = sf.GetFileName();
- //方法名
- string MethodName = sf.GetMethod().Name;
- //行号
- int LineNumber = sf.GetFileLineNumber();
- ////设置运行状态
- //RunState = true;
- st = null;
- HardwareLogWrite(FileName, MethodName, LineNumber, logContent, logState);
- }
- #endregion
- #region 读取日志信息 返回DataTable
- /// <summary>
- /// 读取日志信息 返回DataTable
- /// </summary>
- /// <param name="xmlFilePath">xml路径</param>
- /// <returns>返回DataTable</returns>
- public static DataTable LogRead(string xmlFilePath)
- {
- try
- {
- if (xmlFilePath.Equals(""))
- {
- return null;
- }
- int lastIndex = xmlFilePath.LastIndexOf(@"/");
- string path = xmlFilePath.Substring(0, lastIndex);
- //设置测量文件的路径
- FilePath = path + @"/log.txt";
- //读取日志信息
- FileStream fsRead = new FileStream(FilePath, FileMode.Open, FileAccess.Read);//创建写入文件
- int fsLen = (int)fsRead.Length;
- byte[] heByte = new byte[fsLen];
- int r = fsRead.Read(heByte, 0, heByte.Length);
- //将信息转换为字符串
- string logStr = System.Text.Encoding.UTF8.GetString(heByte);
- fsRead.Close();
- DataTable dt = CreateDataSource(logStr);
- return dt;
- }
- catch (Exception)
- {
- return null;
- }
- }
- /// <summary>
- /// 根据日志内容创建数据源
- /// </summary>
- /// <param name="logStr"></param>
- /// <returns></returns>
- protected static DataTable CreateDataSource(string logStr)
- {
- //拆分为字符组
- string[] groupStr = logStr.Split('\n');
- //创建数据源
- DataTable dt = new DataTable();
- dt.Columns.Add("切入点名称");
- dt.Columns.Add("步骤名称");
- dt.Columns.Add("完成时间");
- dt.Columns.Add("状态");
- foreach (string item in groupStr)
- {
- if (!item.Equals(""))
- {
- DataRow dataRow = dt.NewRow();
- //将每个字符组拆分为对应的信息
- string[] eleStr = item.Split('-');
- //切入点名称与步骤信息
- string[] strNameCotent = eleStr[5].Split(':');
- if (strNameCotent.Length > 1)
- {
- dataRow[0] = strNameCotent[0];
- dataRow[1] = strNameCotent[1];
- }
- else
- {
- dataRow[0] = eleStr[5];
- dataRow[1] = eleStr[5];
- }
- dataRow[2] = eleStr[4];
- dataRow[3] = eleStr[6];
- dt.Rows.Add(dataRow);
- }
- }
- return dt;
- }
- #endregion
-
- #region 日志文件类操作
- /// <summary>
- /// 创建日志文件
- /// </summary>
- protected static bool CreateFile(string xmlFilePath)
- {
- if (xmlFilePath.Equals(""))
- {
- return false;
- }
- //拆分xml路径
- int lastIndex = xmlFilePath.LastIndexOf(@"/");
- string path = xmlFilePath.Substring(0, lastIndex);
- //设置日志文件的路径
- FilePath = path+@"/log.txt";
- //判断是否存在日志路径
- if (!IsExistFile(filePath))
- {
- //没有则创建这个文件
- FileStream fs1 = new FileStream(filePath, FileMode.Create, FileAccess.Write);
- fs1.Close();
- return true;
- }
- return false;
- }
- protected static bool CreateHardwareFile(string logName)
- {
- string DirectoryPath = Application.StartupPath + defaultPath;
- if (!Directory.Exists(DirectoryPath))
- {
- Directory.CreateDirectory(DirectoryPath);
- }
- HardwareLogPath = DirectoryPath + logName;
- //判断是否存在日志路径
- if (!IsExistFile(HardwareLogPath))
- {
- //没有则创建这个文件
- FileStream fs1 = new FileStream(HardwareLogPath, FileMode.Create, FileAccess.Write);
- fs1.Close();
- return true;
- }
- return false;
- }
- /// <summary>
- /// 判断是否存在日志文件
- /// </summary>
- protected static bool IsExistFile(string filePath)
- {
- if (File.Exists(filePath))
- {
- return true;
- }
- return false;
- }
- /// <summary>
- /// 写日志
- /// </summary>
- protected static void LogWrite(string FileName, string MethodName, int LineNumber, string logContent,bool logState)
- {
- try
- {
- //记录日志时间
- string currTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
- //格式:(日志类型+日志记录的所在文件名称+方法名称+行号+时间+描述+状态)
- string logType = "Trace";
- if (!logState)
- {
- logType = "Error";
- }
- //日志类型:LogType:Trace 文件名:xxxx.cs 方法名:aaa() 行数:10 时间:2020-XX-XX XX:XX:XX 描述:切点名称-操作描述 状态:True
- string logStr = "LogType:" + logType + "-" + FileName + "-" + MethodName + "-" + LineNumber + "-" + currTime + "-" + logContent + "-" + logState.ToString() + "";
- //写入日志信息
- FileStream fs1 = new FileStream(filePath, FileMode.Append, FileAccess.Write);//创建写入文件
- StreamWriter sw = new StreamWriter(fs1);
- sw.WriteLine(logStr);//开始写入值
- sw.Close();
- fs1.Close();
- }
- catch (Exception)
- {
- return;
- }
- }
- protected static void HardwareLogWrite(string FileName, string MethodName, int LineNumber, string logContent, bool logState)
- {
- try
- {
- //记录日志时间
- string currTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
- //格式:(日志类型+日志记录的所在文件名称+方法名称+行号+时间+描述+状态)
- string logType = "Trace";
- if (!logState)
- {
- logType = "Error";
- }
- //日志类型:LogType:Trace 文件名:xxxx.cs 方法名:aaa() 行数:10 时间:2020-XX-XX XX:XX:XX 描述:切点名称-操作描述 状态:True
- string logStr = "LogType:" + logType + "-" + FileName + "-" + MethodName + "-" + LineNumber + "-" + currTime + "-" + logContent + "-" + logState.ToString() + "";
- //写入日志信息
- FileStream fs1 = new FileStream(HardwareLogPath, FileMode.Append, FileAccess.Write);//创建写入文件
- StreamWriter sw = new StreamWriter(fs1);
- sw.WriteLine(logStr);//开始写入值
- sw.Close();
- fs1.Close();
- }
- catch (Exception)
- {
- return;
- }
- }
- #endregion
- }
- }
|