天天看點

log4net的簡單應用

一、介紹

log4net庫是Apache log4j架構在Microsoft .NET平台的實作,是一個幫助程式員将日志資訊輸出到各種目标(控制台、檔案、資料庫等)的工具。

log4net是Apache軟體基金會Apache Logging Services工程的一部分。Apache日志服務工程緻力于為程式調試和審計提供跨語言的日志服務。支援多數架構,可輸出日志到多種目标,層級日志體系,可使用XML配置,可動态配置,記錄上下文資訊,被檢驗過的體系,子產品化和可擴充化設計,靈活、高性能。

log4net有5個日志級别:

1.Debug:調試級别資訊。

2.Info:一般資訊。

3.Warn:警告資訊。

4.Error:錯誤資訊。

5.Fatal:緻命錯誤。

二、簡單應用

1.添加引用

通過網絡下載下傳或nuget安裝,得到log4net.dll,添加到項目中引用。

2.在web.config中或建立log4net.config配置日志

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

3.建立日志類

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

namespace Test.Core

{

    public class Log

    {

        /// <summary>

        /// 一般錯誤

        /// </summary>

        /// <param name="message">消息</param>

        public static void Error(object message)

        {

            try

            {

                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());

                log.Error(message);

            }

            catch

            {

            }

        }

        /// <summary>

        /// 一般錯誤

        /// </summary>

        /// <param name="message">消息</param>

        /// <param name="exception">異常</param>

        public static void Error(object message, Exception exception)

        {

            try

            {

                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());

                log.Error(message, exception);

            }

            catch

            {

            }

        }

        /// <summary>

        /// 資訊

        /// </summary>

        /// <param name="message">消息</param>

        public static void Info(object message)

        {

            try

            {

                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());

                log.Info(message);

            }

            catch

            {

            }

        }

        /// <summary>

        /// 資訊

        /// </summary>

        /// <param name="message">消息</param>

        /// <param name="exception">異常</param>

        public static void Info(object message, Exception ex)

        {

            try

            {

                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());

                log.Info(message, ex);

            }

            catch

            {

            }

        }

        /// <summary>

        /// 警告

        /// </summary>

        /// <param name="message">消息</param>

        public static void Warn(object message)

        {

            try

            {

                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());

                log.Warn(message);

            }

            catch

            {

            }

        }

        /// <summary>

        /// 警告

        /// </summary>

        /// <param name="message">消息</param>

        /// <param name="exception">異常</param>

        public static void Warn(object message, Exception ex)

        {

            try

            {

                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());

                log.Warn(message, ex);

            }

            catch

            {

            }

        }

        /// <summary>

        /// 調試

        /// </summary>

        /// <param name="message">消息</param>

        public static void Debug(object message)

        {

            try

            {

                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());

                log.Debug(message);

            }

            catch

            {

            }

        }

        /// <summary>

        /// 調試

        /// </summary>

        /// <param name="message">消息</param>

        /// <param name="exception">異常</param>

        public static void Debug(object message, Exception ex)

        {

            try

            {

                log4net.ILog log = log4net.LogManager.GetLogger(GetCurrentMethodFullName());

                log.Debug(message, ex);

            }

            catch

            { }

        }

        /// <summary>

        /// 擷取執行的方法名稱

        /// </summary>

        /// <returns></returns>

        static string GetCurrentMethodFullName()

        {

            try

            {

                int depth = 2;

                System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();

                int maxFrames = st.GetFrames().Length;

                System.Diagnostics.StackFrame sf;

                string methodName, className;

                Type classType;

                do

                {

                    sf = st.GetFrame(depth++);

                    classType = sf.GetMethod().DeclaringType;

                    className = classType.ToString();

                } while (className.EndsWith("Exception") && depth < maxFrames);

                methodName = sf.GetMethod().Name;

                return className + "." + methodName;

            }

            catch (Exception e)

            {

                log4net.LogManager.GetLogger("Core.Log").Error(e.Message, e);

                return "擷取方法名失敗";

            }

        }

    }

}

4.調用

log4net的簡單應用

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

XmlConfiguratorAttribute有3個屬性:
ConfigFile: 配置檔案的名字,檔案路徑相對于應用程式目錄(AppDomain.CurrentDomain.BaseDirectory)。ConfigFile屬性不能和ConfigFileExtension屬性一起使用。
ConfigFileExtension: 配置檔案的擴充名,檔案路徑相對于應用程式的目錄。ConfigFileExtension屬性不能和ConfigFile屬性一起使用。
Watch: 如果将Watch屬性設定為true,就會監視配置檔案。當配置檔案發生變化的時候,就會重新加載。
如果ConfigFile和ConfigFileExtension都沒有設定,則使用應用程式的配置檔案App.config(Web.config)。