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,
}