using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Web; using System.Text.RegularExpressions; using System.Linq; using System.Collections; using System.Reflection; using System.Collections.Specialized; using ZetaLongPaths; /// /// 日志操作类 /// public class LogUtils { private static object locker = new object(); /// /// 写入日志 /// /// 日志名称 /// 开发记录者 /// 日志级别 /// 日志详情 /// 记录时间 public static void Write(string logName, Developer developer, LogLevel level, List details, DateTime createtime) { Log log = new Log(); log.LogName = logName; log.Level = level; log.Developer = developer; log.Added = createtime; log.Details = details; string logText = log.ToString() + "\r\n----------------------------------------------------------------------------------------------------\r\n"; string fileName = DateTime.Now.ToString("yyyyMMdd") + ".log"; string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log"); if (!ZetaLongPaths.ZlpIOHelper.DirectoryExists(dir)) { ZetaLongPaths.ZlpIOHelper.CreateDirectory(dir); } fileName = Path.Combine(dir, fileName); ZlpIOHelper.AppendText(fileName, logText, Encoding.GetEncoding("GBK")); } /// /// 写入Info 日志 /// /// 日志名称 /// 开发记录者 /// 日志内容 public static void LogInfo(string logName, Developer developer, params object[] Info_objs) { lock (locker) { Write(logName, developer, LogLevel.Info, Info_objs?.ToList(), DateTime.Now); } } /// s /// 写入带 堆栈执行 的Info 日志 /// /// 日志名称 /// 开发记录者 /// 日志内容 public static void LogWrite(string logName, Developer developer, params object[] Info_objs) { lock (locker) { List lstDetails = new List(); System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace(1, true); System.Diagnostics.StackFrame frame = stack.GetFrame(0); string execFile = frame.GetFileName(); string fullName = frame.GetMethod().DeclaringType.FullName; string methodName = frame.GetMethod().Name; int execLine = frame.GetFileLineNumber(); lstDetails.Add("文件路径:" + execFile + "\r\n"); lstDetails.Add("类全命名:" + fullName + "\r\n"); lstDetails.Add("执行方法:" + methodName + "\r\n"); lstDetails.Add("当前行号:" + execLine + "\r\n"); if (Info_objs != null && Info_objs.Length > 0) { lstDetails.AddRange(Info_objs); } Write(logName, developer, LogLevel.Info, lstDetails, DateTime.Now); } } /// /// 写入Warn 日志 /// /// 日志名称 /// 开发记录者 /// 日志内容 public static void LogWarn(string logName, Developer developer, params object[] Info_objs) { lock (locker) { List lstDetails = new List(); System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace(1, true); System.Diagnostics.StackFrame frame = stack.GetFrame(0); string execFile = frame.GetFileName(); string fullName = frame.GetMethod().DeclaringType.FullName; string methodName = frame.GetMethod().Name; int execLine = frame.GetFileLineNumber(); lstDetails.Add("文件路径:" + execFile + "\r\n"); lstDetails.Add("类全命名:" + fullName + "\r\n"); lstDetails.Add("执行方法:" + methodName + "\r\n"); lstDetails.Add("当前行号:" + execLine + "\r\n"); if (Info_objs != null && Info_objs.Length > 0) { lstDetails.AddRange(Info_objs); } Write(logName, developer, LogLevel.Warn, lstDetails, DateTime.Now); } } /// /// 写入 Errorr日志 /// /// 日志名称 /// 开发记录者 /// 异常对象(可为null) /// 日志内容 public static void LogError(string logName, Developer developer, Exception ex, params object[] Info_objs) { lock (locker) { List lstDetails = new List(); System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace(1, true); System.Diagnostics.StackFrame frame = stack.GetFrame(0); string execFile = frame.GetFileName(); string fullName = frame.GetMethod().DeclaringType.FullName; string methodName = frame.GetMethod().Name; int execLine = frame.GetFileLineNumber(); lstDetails.Add("文件路径:" + execFile + "\r\n"); lstDetails.Add("类全命名:" + fullName + "\r\n"); lstDetails.Add("执行方法:" + methodName + "\r\n"); lstDetails.Add("当前行号:" + execLine + "\r\n"); lstDetails.Add(ex); if (ex.InnerException != null) { lstDetails.Add(ex.InnerException); } if (Info_objs != null && Info_objs.Length > 0) { lstDetails.AddRange(Info_objs); } Write(logName, developer, LogLevel.Error, lstDetails, DateTime.Now); } } } /// /// 程序日志 /// public class Log { public Guid Id { get { return Guid.NewGuid(); } } /// /// 日志名称 /// public string LogName { get; set; } /// /// 日志级别 /// public LogLevel Level { get; set; } /// /// 当前记录日志者 /// public Developer Developer { get; set; } /// /// 日志详细内容 /// public List Details { get; set; } /// /// 日志时间 /// public DateTime Added { get; set; } public override string ToString() { return Newtonsoft.Json.JsonConvert.SerializeObject(this ?? default(Log)); } #region 枚举 处理 /// /// 根据枚举对象得到 枚举键值对 /// /// 枚举 /// public static Dictionary GetAllEnums() { Dictionary dict = null; Type type = typeof(T); string[] enums = Enum.GetNames(type); if (enums != null && enums.Length > 0) { dict = new Dictionary(); foreach (string item in enums) { string str = Enum.Parse(typeof(T), item).ToString(); T deve = (T)Enum.Parse(typeof(T), item); string uid = Convert.ToInt32(deve).ToString(); dict.Add(str, uid); } } return dict; } /// /// 根据枚举val获取枚举name /// /// 枚举类型 /// 枚举val /// 枚举name public static T GetEnumName(int enumVal) { T t = (T)Enum.Parse(typeof(T), enumVal.ToString()); return t; } #endregion } /// /// 日志级别 /// public enum LogLevel { Info = 0, Warn = 1, Error = 2 } /// /// 日志记录开发者 /// public enum Developer { /// /// 系统默认 /// SysDefault = 0, /// /// 其他用户 /// MJ = 1, }