[ASP.NET MVC] 专案使用複合式Log

在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, "讯息");

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章