Log4net在類庫中的用法

1、使用Log4net

具體流程以下:html

第一步:引用類庫

  使用VS的nuget包管理器引用log4net

第二步:建立配置文件apache

方法1、獨立配置文件app

  在類庫中添加一個log4net的配置文件,起名:log4net.config,設置此文件的屬性複製到輸出目錄爲:始終複製。注意這一項很重要。框架

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <log4net>
    <!--根配置-->
    <root>
      <!--日誌級別:可選值: ERROR > WARN > INFO > DEBUG -->
      <level value="ERROR"/>
      <level value="WARN"/>
      <level value="INFO"/>
      <level value="DEBUG"/>
      <appender-ref ref="ErrorLog" />
      <appender-ref ref="WarnLog" />
      <appender-ref ref="InfoLog" />
      <appender-ref ref="DebugLog" />
    </root>
    <!-- 錯誤 Error.log-->
    <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
      <!--目錄路徑,能夠是相對路徑或絕對路徑-->
      <param name="File" value="App_Data/Logs"/>
      <!--文件名,按日期生成文件夾-->
      <param name="DatePattern" value="/yyyy-MM-dd/&quot;Error.log&quot;"/>
      <!--追加到文件-->
      <appendToFile value="true"/>
      <!--建立日誌文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
      <rollingStyle value="Composite"/>
      <!--寫到一個文件-->
      <staticLogFileName value="false"/>
      <!--單個文件大小。單位:KB|MB|GB-->
      <maximumFileSize value="200MB"/>
      <!--最多保留的文件數,設爲"-1"則不限-->
      <maxSizeRollBackups value="-1"/>
      <!--日誌格式-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="時間:%date 描述:%message 異常:%exception  %n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ERROR" />
        <param name="LevelMax" value="ERROR" />
      </filter>
    </appender>

    <!-- 警告 Warn.log-->
    <appender name="WarnLog" type="log4net.Appender.RollingFileAppender">
      <!--目錄路徑,能夠是相對路徑或絕對路徑-->
      <param name="File" value="App_Data/Logs"/>
      <!--文件名,按日期生成文件夾-->
      <param name="DatePattern" value="/yyyy-MM-dd/&quot;Warn.log&quot;"/>
      <!--追加到文件-->
      <appendToFile value="true"/>
      <!--建立日誌文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
      <rollingStyle value="Composite"/>
      <!--寫到一個文件-->
      <staticLogFileName value="false"/>
      <!--單個文件大小。單位:KB|MB|GB-->
      <maximumFileSize value="200MB"/>
      <!--最多保留的文件數,設爲"-1"則不限-->
      <maxSizeRollBackups value="-1"/>
      <!--日誌格式-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="時間:%date 描述:%message %n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="WARN" />
        <param name="LevelMax" value="WARN" />
      </filter>
    </appender>

    <!-- 信息 Info.log-->
    <appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
      <!--目錄路徑,能夠是相對路徑或絕對路徑-->
      <param name="File" value="App_Data/Logs"/>
      <!--文件名,按日期生成文件夾-->
      <param name="DatePattern" value="/yyyy-MM-dd/&quot;Info.log&quot;"/>
      <!--追加到文件-->
      <appendToFile value="true"/>
      <!--建立日誌文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
      <rollingStyle value="Composite"/>
      <!--寫到一個文件-->
      <staticLogFileName value="false"/>
      <!--單個文件大小。單位:KB|MB|GB-->
      <maximumFileSize value="200MB"/>
      <!--最多保留的文件數,設爲"-1"則不限-->
      <maxSizeRollBackups value="-1"/>
      <!--日誌格式-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="時間:%date 描述:%message %n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="INFO" />
      </filter>
    </appender>

    <!-- 調試 Debug.log-->
    <appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
      <!--目錄路徑,能夠是相對路徑或絕對路徑-->
      <param name="File" value="App_Data/Logs"/>
      <!--文件名,按日期生成文件夾-->
      <param name="DatePattern" value="/yyyy-MM-dd/&quot;Debug.log&quot;"/>
      <!--追加到文件-->
      <appendToFile value="true"/>
      <!--建立日誌文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]-->
      <rollingStyle value="Composite"/>
      <!--寫到一個文件-->
      <staticLogFileName value="false"/>
      <!--單個文件大小。單位:KB|MB|GB-->
      <maximumFileSize value="200MB"/>
      <!--最多保留的文件數,設爲"-1"則不限-->
      <maxSizeRollBackups value="-1"/>
      <!--日誌格式-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="時間:%date 描述:%message 異常:%exception  %newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="DEBUG" />
      </filter>
    </appender>


  </log4net>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

 

方法二:系統配置文件asp.net

  須要配置相關的配置文件App.config或Web.config,普通應用的配置文件 爲App.config,asp.net的配置文件爲Web.config。ide

  有關log的配置以下:post

 <configuration>
   <configSections>
       <!-- log4net的定義 -->
         <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
   </configSections>

   <log4net>
  <!-- Console部分log輸出格式的設定 -->
         <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
             <layout type="log4net.Layout.PatternLayout">
                 <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
             </layout>
         </appender>

  <!-- 日誌文件部分log輸出格式的設定 -->
         <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
             <file value="具體的log文件路徑名" />
             <appendToFile value="true" />
             <maxSizeRollBackups value="10" />
             <maximumFileSize value="1MB" />
             <rollingStyle value="Size" />
             <staticLogFileName value="true" />
             <layout type="log4net.Layout.PatternLayout">
                 <header value="[Header]&#13;&#10;" />
                 <footer value="[Footer]&#13;&#10;" />
                 <ConversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
             </layout>
         </appender>
  
  <!-- Setup the root category, add the appenders and set the default level -->
         <root>
             <level value="ALL" />
             <appender-ref ref="ConsoleAppender" />
             <appender-ref ref="RollingLogFileAppender" />
         </root>
     </log4net>
 </configuration>

 

第三步:添加引用到程序集

在Global.asax的Application_Start事件中加入初始化代碼:url

 protected void Application_Start(object sender, EventArgs e)
   {
              log4net.Config.XmlConfigurator.Configure();         
   }

項目的AssemblyInfo.cs裏面加上[assembly: log4net.Config.XmlConfigurator()],這樣項目工程和log4net就 創建了關聯。【其中app.config應當放在解決方案的根目錄下!】spa

若是不放在跟目錄下,或獨立配置文件,應當用這種方式:.net

[assembly:log4net.Config.XmlConfigurator(ConfigFileExtension=@"c:/app.config",Watch=true)]

第四步:實例演示

如下例子是先實例化Ilog,在Application_Error方法中寫日誌:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 
protected void Application_Error(Object sender, EventArgs e) 
{ 
  log.Info("/r/n客戶機IP:"+ Request.UserHostAddress +"/r/n<BR>錯誤地址:"+ Request.Url, 
  Server.GetLastError()); 
}

 

第五步、封裝靜態類LogHelper

LogHepler.cs代碼

using System;
using log4net;

namespace XXXX.Services
{
    /// <summary>
    /// 日誌類
    /// </summary>
    public abstract class LogHelper
    {
        //系統框架日誌

        private static ILog Logger => LogManager.GetLogger("MMISLogger");


        //框架內部方法

        #region 調試信息
        /// <summary>
        /// 調試信息
        /// </summary>
        /// <param name="message">描述信息</param>
        /// <param name="exception">異常信息</param>
        public static void Debug(object message, Exception exception = null)
        {
            Logger.Debug(message, exception);
        }
        public static void DebugFormat(string format, params object[] args)
        {
            Logger.DebugFormat(format, args);
        }
        public static void DebugFormat(Exception exception, string format, params object[] args)
        {
            Logger.DebugFormat(format, args, exception);
        }
        public static void DebugFormat(IFormatProvider formatProvider, string format, params object[] args)
        {
            Logger.DebugFormat(formatProvider, format, args);
        }
        public static void DebugFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args)
        {
            Logger.DebugFormat(formatProvider, format, args, exception);
        }
        #endregion

        #region 通常信息
        /// <summary>
        /// 通常信息
        /// </summary>
        /// <param name="message">描述信息</param>
        /// <param name="exception">異常信息</param>
        public static void Info(object message, Exception exception = null)
        {
            Logger.Info(message, exception);
        }
        public static void InfoFormat(string format, params object[] args)
        {
            Logger.InfoFormat(format, args);
        }
        public static void InfoFormat(Exception exception, string format, params object[] args)
        {
            Logger.InfoFormat(format, args, exception);
        }
        public static void InfoFormat(IFormatProvider formatProvider, string format, params object[] args)
        {
            Logger.InfoFormat(formatProvider, format, args);
        }
        public static void InfoFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args)
        {
            Logger.InfoFormat(formatProvider, format, args, exception);
        }
        #endregion

        #region 警告
        /// <summary>
        /// 警告
        /// </summary>
        /// <param name="message">描述信息</param>
        /// <param name="exception">異常信息</param>
        public static void Warn(object message, Exception exception = null)
        {
            Logger.Warn(message, exception);
        }
        public static void WarnFormat(string format, params object[] args)
        {
            Logger.WarnFormat(format, args);
        }
        public static void WarnFormat(Exception exception, string format, params object[] args)
        {
            Logger.WarnFormat(format, args, exception);
        }
        public static void WarnFormat(IFormatProvider formatProvider, string format, params object[] args)
        {
            Logger.WarnFormat(formatProvider, format, args);
        }
        public static void WarnFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args)
        {
            Logger.WarnFormat(formatProvider, format, args, exception);
        }
        #endregion

        #region 通常錯誤
        /// <summary>
        /// 通常錯誤
        /// </summary>
        /// <param name="message">描述信息</param>
        /// <param name="exception">異常信息</param>
        public static void Error(object message, Exception exception = null)
        {
            Logger.Error(message, exception);
        }
        public static void ErrorFormat(string format, params object[] args)
        {
            Logger.ErrorFormat(format, args);
        }
        public static void ErrorFormat(Exception exception, string format, params object[] args)
        {
            Logger.ErrorFormat(format, args, exception);
        }
        public static void ErrorFormat(IFormatProvider formatProvider, string format, params object[] args)
        {
            Logger.ErrorFormat(formatProvider, format, args);
        }
        public static void ErrorFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args)
        {
            Logger.ErrorFormat(formatProvider, format, args, exception);
        }
        #endregion

        #region 致命錯誤
        /// <summary>
        /// 致命錯誤
        /// </summary>
        /// <param name="message">描述信息</param>
        /// <param name="exception">異常信息</param>
        public static void Fatal(object message, Exception exception = null)
        {
            Logger.Fatal(message, exception);
        }
        public static void FatalFormat(string format, params object[] args)
        {
            Logger.FatalFormat(format, args);
        }
        public static void FatalFormat(Exception exception, string format, params object[] args)
        {
            Logger.FatalFormat(format, args, exception);
        }
        public static void FatalFormat(IFormatProvider formatProvider, string format, params object[] args)
        {
            Logger.FatalFormat(formatProvider, format, args);
        }
        public static void FatalFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args)
        {
            Logger.FatalFormat(formatProvider, format, args, exception);
        }
        #endregion 
    }
}

使用示例

         //記錄錯誤日誌 
            LogHelper.Info("Info", new Exception("THIS IS HOME")); 
            LogHelper.Warn("Warn", new Exception("THIS IS HOME")); 
            LogHelper.Debug("Debug", new Exception("THIS IS HOME")); 
            LogHelper.Error("error", new Exception("THIS IS HOME"));     

使用log4net.config,寫日誌後,會自動建立當天日期的文件夾和四個不一樣類型的日誌文件(具體根據配置生成)

 

官方文檔:http://logging.apache.org/log4net/release/manual/introduction.html

同時推薦幾篇文章:

(轉)很是完善的Log4net詳細說明

 

Log4Net使用詳解(續)

https://blog.csdn.net/zhoufoxcn/article/details/6029021

.NET環境下log處理解決方案(Log4Net)

https://blog.csdn.net/zyc21st/article/details/639820

相關文章
相關標籤/搜索