zoukankan      html  css  js  c++  java
  • Log4net在类库中的用法

    一、使用Log4net

    具体流程如下:

    第一步:引用类库

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

    第二步:创建配置文件

    方法一、独立配置文件

      在类库中添加一个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>

    方法二:系统配置文件

      需要配置相关的配置文件App.config或Web.config,普通应用的配置文件 为App.config,asp.net的配置文件为Web.config。

      有关log的配置如下:

     <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事件中加入初始化代码:

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

    项目的AssemblyInfo.cs里面加上[assembly: log4net.Config.XmlConfigurator()],这样项目工程和log4net就 建立了关联。【其中app.config应当放在解决方案的根目录下!】

    如果不放在跟目录下,或独立配置文件,应当用这种方式:

    [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

  • 相关阅读:
    Spring--自定义注解
    IntelliJ IDEA实用插件
    Zero date value prohibited解决方法
    如何保证幂等性
    Map遍历的几种方式
    Static关键字
    索引失效 -- 使用Between范围查询时
    接口的不同写法在Swagger上的不同
    js与jquery获取input输入框中的值
    一个简单的 aiax请求例子
  • 原文地址:https://www.cnblogs.com/xcsn/p/4678337.html
Copyright © 2011-2022 走看看