在MVC专案下建立Log类别
public class LogWriter<T> where T : Enum{ /// <summary>路径</summary> private static string Path = "C:\\LogFile"; /// <summary>档案名称</summary> private static string Name = "Log"; /// <summary>筛选内容</summary> private static T AllowType; /// <summary> /// 设定路径和名称 /// </summary> /// <param name="NewPath">路径</param> /// <param name="NewName">名称</param> /// <param name="NewAllowType">筛选的列举</param> public static void SetPathAndName(string NewPath, string NewName, T NewAllowType) { Path = NewPath; Name = NewName; AllowType = NewAllowType; } /// <summary> /// 更换新的允许 /// </summary> /// <param name="NewAllowType">新允许</param> public void ChangeAllow(T NewAllowType) { AllowType = NewAllowType; } /// <summary>产生Log档</summary> public static void CreateLogger() { //如果此路径没有资料夹 if (!Directory.Exists(Path)) { //新增资料夹 Directory.CreateDirectory(Path); } WriteLog("======================================="); WriteLog("程式启动 : " + DateTime.Now.ToString()); WriteLog("======================================="); } /// <summary> /// 写入Log /// </summary> /// <param name="log">Log内容</param> public static void WriteLog(string log) { if (!Directory.Exists(Path)) CreateLogger(); using (StreamWriter sw = File.AppendText(Path + "\\" + Name)) sw.WriteLine(log); } /// <summary> /// 写入Log(複合列举) /// </summary> /// <param name="LogType">Log类别</param> /// <param name="ClassName">使用GetType的Name或FullName</param> /// <param name="MethodName">使用MethodBase.GetCurrentMethod</param> /// <param name="Message">Log内容</param> /// <returns></returns> public static void WriteLogs(T LogType, string ClassName, string MethodName, string Message) { if (!Directory.Exists(Path)) CreateLogger(); List<string> AllowTypeList = new List<string>(); foreach (T EnumType in Enum.GetValues(typeof(T))) if (AllowType.HasFlag(EnumType) && LogType.HasFlag(EnumType)) AllowTypeList.Add(EnumType.ToString()); using (StreamWriter sw = File.AppendText(Path + "\\" + Name)){ sw.WriteLine($"[{string.Join("|", AllowTypeList)}] {ClassName}[{MethodName}] {Message}"); } } /// <summary> /// 写入Log(多列举) /// </summary> /// <param name="LogType">Log类别</param> /// <param name="ClassName">使用GetType的Name或FullName</param> /// <param name="MethodName">使用MethodBase.GetCurrentMethod</param> /// <param name="Message">Log内容</param> /// <returns></returns> public static void WriteLogm(T LogType, string ClassName, string MethodName, string Message) { if (!Directory.Exists(Path)) CreateLogger(); foreach (T EnumType in Enum.GetValues(typeof(T))) if (LogType.HasFlag(EnumType)) WriteLog(EnumType, ClassName, MethodName, Message); } /// <summary> /// 写入Log /// </summary> /// <param name="LogType">Log类别</param> /// <param name="ClassName">使用GetType的Name或FullName</param> /// <param name="MethodName">使用MethodBase.GetCurrentMethod</param> /// <param name="Message">Log内容</param> /// <returns></returns> public static void WriteLog(T LogType, string ClassName, string MethodName, string Message) { if (!AllowType.HasFlag(LogType)) return; WriteLog($"[{LogType}] {ClassName}[{MethodName}] {Message}"); }}
建立Log用Enum
public class ConstEnum{ /// <summary>Log列举</summary> [Flags] public enum ELogType { #region 介面 /// <summary>网站</summary> WEB = 0x0001, /// <summary>核心</summary> CORE = 0x0002, #endregion #region 类型 /// <summary>讯息</summary> INFO = 0x0004, /// <summary>警告</summary> WARN = 0x0008, /// <summary>错误</summary> ERROR = 0x0010, #endregion }}
在应用程式开始和结束的地方加入
namespace WebProjectName{ /// <summary>执行端</summary> public class MvcApplication : System.Web.HttpApplication { /// <summary>应用程式开始</summary> protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); //加入路由 RouteConfig.RegisterRoutes(RouteTable.Routes); //封装JS和CSS档 BundleConfig.RegisterBundles(BundleTable.Bundles); //开启log记录 LogWriter<ELogType>.SetPathAndName("C:\\LogFile", "Log", (ELogType)0xFFFF); LogWriter<ELogType>.CreateLogger(); } /// <summary>应用程式结束</summary> protected void Application_End() { LogWriter<ELogType>.WriteLog("============================"); LogWriter<ELogType>.WriteLog("程式结束Application_End : " + DateTime.Now.ToString()); LogWriter<ELogType>.WriteLog("============================"); } /// <summary>程式出错</summary> protected void Application_Error() { Exception ErrorMsg = Server.GetLastError(); LogWriter<ELogType>.WriteLog($"[Application_Error] Exception:{ErrorMsg.GetType().Name}({ErrorMsg.Message}) \nSource:{ErrorMsg.Source} \nStackTrace:{ErrorMsg.StackTrace}"); } }}
使用方式
LogWriter.WriteLogs( ELogType.WEB | ELogType.WARN, GetType().Name, MethodBase.GetCurrentMethod().Name, "讯息");