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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ExtJs简介: Extjs在经过两年的发展,Ext JS从2.0版开始,越来越受用户欢迎,今年,Extjs不但推出3.0版本,而且还推出了Ext Core,准备在Web2.0网站开发占一席之地,如在 Extjs2.x版本为人所诟病的速度问题在ExtJs3.0有所改善。不过,最革命性的改变还是ExtJs新增的Ext.Direct功能,它实现了服务器端的无关性。 在3.2版本,Ext将增加移动组件,进军移动市场,这将是一次革命性的改进,同时在4.0版本,除了对HTML5的支持外,还增加画布功能。 还有一点更值得期待,就是Ext的RAD开发工具也在开发当。估计在不久之后,也可以向VB,C#一样,通过可视化工具拖拽方式即可轻松开发Web应用。 ExtJs在发展过程不仅一步步地巩固着自己在HTML、CSS、JavaScript领域无可比拟的优势,而且已经开始向相关领域发展扩张。如从2.02版开始为Adobe的RIA技术AIR提供支持,并且为GWT开发了Ext GWT2.0,这些都体现了ExtJs的强大活力和生命力。 在可预见的未来,ExtJs将会甩开对手,大踏步向前。 ExtJs的前景: ExtJS的前景是非常好的,现在的QQ2009的登录界面以及使用,迅雷最新版的主界面,都能够找到这个框架的踪迹。web QQ也是有一个技术版本是使用这种框架的,所以,可以看出,extjs的应用,是越来越广泛了,extjs的前景,不可估量,不论站在技术开发的层次还是大部分用户的使用体验。 国讯教育通用智能OA办公系统项目培训目标 本系列讲座分为四大部分: 1、ExtJs基础篇:主要介绍Ext Core的一些核心功能 2、ExtJs进阶篇:主要介绍ExtJs里的常用组件,容器及布局 3、ExtJs数据篇:主要介绍和数据库交互的相关组件及CRUD功能 4、项目实战篇: Extjs3.2+ASP.NET七层架构+设计模式+ log4j+WebSerice等技术国讯教育通用智能OA办公平台 适用对象 1、要求有一定的javascript语言和HTML,CSS基础的学员 2、有一定的Asp.net网页编程基础和C#语言基础 3、有志于从事富客户端技术ExtJs的学习与研究的学生及专业Web开发人员 模块介绍 1、ExtJs基础篇-ExtJs快速入门 1.1、ExtJs基础篇(1):ExtJs概述与环境配置及架构剖析 1.2、ExtJs基础篇(2):ExtJs OOP基础 1.3、ExtJs基础篇(3):ExtJs 核心函数简介 1.4、ExtJs基础篇(4):ExtJs的模板详解(1) 1.5、ExtJs基础篇(5):ExtJs的模板详解(2) 2、ExtJs进阶篇:Extjs进阶 2.1、大话ExtJs的布局 2.2、ExtJs的常见组件 2.3、ExtJs的面板及Window窗口 2.4、ExtJs的选项卡面板 2.5、ExtJs的对话框与Combox组件 2.6、ExtJs的ExtTree详解 3、ExtJs数据篇 3.1、数据存储基本单元Record与DataField详解 3.2、数据存储Store详解1 3.3、数据存储Store详解2 3.4、数据代理DataProxy详解 3.5、数据读取器DataReader详解 3.6、Ext.Direct详解1 3.7、Ext.Direct详解2 4、ExtJs实战篇—国讯教育通用智能OA办公平台 (共70讲) 4.1、系统业务流程主功能结构分析 4.2、数据库设计 4.3、抽象工厂+反射七层架构设计 4.4、首页布局设计 4.5、人事管理模块分析设计 4.6、个人专区模块分析设计 4.7、日程管理区模块分析设计 4.8、文档管理模块分析设计 4.9、工单管理模块分析设计 4.10、工资管理模块分析设计 4.11、内部邮箱模块分析设计 4.12、系统管理模块分析设计 4.13、考勤管理模块分析设计 4.14、消息管理模块分析设计 4.15、日志管理 4.16、报表打印及数据统计 4.17、数据导入导出管理 本项目所涉及到的技术: 数据库方面: 1、PD数据库建模 2、SQL Server2005视图、存储过程、用户自定义函数、触发器 ASP.net方面: 1、ASP.net PetShop七层架构 2、抽象工厂+反射+配置文件实现数据库无缝切换 3、序列化/反序列化+泛型集合的应用 4、利用ASP.net HttpHandler实现防盗链 5、网站安全性方面:ASP.net防SQL注入及Web Service Soap头加密技术 6、AS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值