log4net使用流程

從網(wǎng)上下載的破解版的hishop中的源碼扒出來的,覺得不錯,先記下來,以后做項目異常BUG記錄都用這個。。

下面是使用流程:

  1. VS中用NUGET搜索log4net,安裝

  2. 項目的工具類庫Util中建一Log類,代碼如下:

using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JiuFen.KuaiLe10.Util
{
public static class Log
{
public static void Error(object message)
{
ILog logger = LogManager.GetLogger(Log.GetCurrentMethodFullName());
logger.Error(message);
}

    public static void Error(object message, System.Exception exception)
    {
        ILog logger = LogManager.GetLogger(Log.GetCurrentMethodFullName());
        logger.Error(message, exception);
    }

    public static void Info(object message)
    {
        ILog logger = LogManager.GetLogger(Log.GetCurrentMethodFullName());
        logger.Info(message);
    }

    public static void Info(object message, System.Exception ex)
    {
        ILog logger = LogManager.GetLogger(Log.GetCurrentMethodFullName());
        logger.Info(message, ex);
    }

    public static void Warn(object message)
    {
        ILog logger = LogManager.GetLogger(Log.GetCurrentMethodFullName());
        logger.Warn(message);
    }

    public static void Warn(object message, System.Exception ex)
    {
        ILog logger = LogManager.GetLogger(Log.GetCurrentMethodFullName());
        logger.Warn(message, ex);
    }

    public static void Debug(object message)
    {
        ILog logger = LogManager.GetLogger(Log.GetCurrentMethodFullName());
        logger.Debug(message);
    }

    public static void Debug(object message, System.Exception ex)
    {
        ILog logger = LogManager.GetLogger(Log.GetCurrentMethodFullName());
        logger.Debug(message, ex);
    }

    private static string GetCurrentMethodFullName()
    {
        string result;
        try
        {
            int num = 2;
            System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
            int num2 = stackTrace.GetFrames().Length;
            System.Diagnostics.StackFrame frame;
            string text;
            do
            {
                frame = stackTrace.GetFrame(num++);
                System.Type declaringType = frame.GetMethod().DeclaringType;
                text = declaringType.ToString();
            }
            while (text.EndsWith("Exception") && num < num2);
            string name = frame.GetMethod().Name;
            result = text + "." + name;
        }
        catch
        {
            result = null;
        }
        return result;
    }
}

}

  1. web.config文件中加入如下內(nèi)容:

<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

</configSections>

<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

<log4net>

<appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="File" value="Log\Info" />
<param name="AppendToFile" value="true" />
<param name="rollingStyle" value="Date" />
<param name="datePattern" value="yyyy-MM-dd.'Info.log'" />
<param name="staticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n%n%n 記錄時間:%date %n日志級別: %-5level %n出錯類:%logger %n錯誤描述:%message %newline%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>

<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="File" value="Log\Error" />
<param name="AppendToFile" value="true" />
<param name="rollingStyle" value="Date" />
<param name="datePattern" value="yyyy-MM-dd.'error.log'" />
<param name="staticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n%n%n 記錄時間:%date %n日志級別: %-5level %n出錯類:%logger %n錯誤描述:%message %newline%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>

<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="File" value="Log\Debug" />
<param name="AppendToFile" value="true" />
<param name="rollingStyle" value="Date" />
<param name="datePattern" value="yyyy-MM-dd.'debug.log'" />
<param name="staticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n%n%n 記錄時間:%date %n日志級別: %-5level %n出錯類:%logger %n錯誤描述:%message %newline%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>
<root>
<level value="DEBUG" />

<appender-ref ref="ErrorRollingFileAppender" />
<appender-ref ref="DebugRollingFileAppender" />
<appender-ref ref="InfoRollingFileAppender" />
</root>

</log4net>

  1. 建立基類控制 器,重寫OnException方法:

using JiuFen.KuaiLe10.Util;
using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace JiuFen.KuaiLe10.Web.Controllers
{
public class BaseController : Controller
{
protected override void OnException(ExceptionContext filterContext)
{
Exception exception = filterContext.Exception;
string message = exception.Message;
base.OnException(filterContext);

        string str = filterContext.RouteData.Values["controller"].ToString();
        string str1 = filterContext.RouteData.Values["action"].ToString();
        object item = filterContext.RouteData.DataTokens["area"];
        string str2 = string.Format("頁面未捕獲的異常:Area:{0},Controller:{1},Action:{2}", item, str, str1);


        Log.Error(str2, exception);
    }

}

}

  1. 最重要的,在你的公用類庫所在的項目的AssemblyInfo.cs文件中加入:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

這樣在建立控制器的時候繼承自基類控制器,運行中出錯的話都會記錄到網(wǎng)站目錄下的log目錄下的debug目錄下

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容