我心中的核心组件(可插拔的AOP)~第三回 日志记录组件之log4net

在项目中有统一的日志是很必要的,之前自己写过vlog项目,这个项目与现在比较流行的log4net很像,用起来也很方便,今天主要说一下log4net这个日志工具,这使用vs2012测试的,使用nuget把log4net组件添加到项目中,如图:

然后在项目里为log4net建立一个配置文件,可以命名为log4net.config,一般代码如下:

<log4net>
  <logger name="loginfo">
    <level value="INFO" />
    <appender-ref ref="LogFileAppender" />
  </logger>
  <!--定义输出到文件中-->
  <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
    <!--定义文件存放位置-->
    <file value="log4netfile.txt" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <!--每条日志末尾的文字说明-->
      <footer value="by 占占" />
      <!--输出格式-->
      <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
      <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
    </layout>
  </appender>
  <!--定义输出到控制台命令行中-->
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>
  <!--定义输出到windows事件中-->
  <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>
  <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->
  <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
    <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
    <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
    <!--定义各个参数-->
    <parameter>
      <parameterName value="@logDate" />
      <dbType value="String" />
      <size value="240" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@thread" />
      <dbType value="String" />
      <size value="240" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%thread" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@logLevel" />
      <dbType value="String" />
      <size value="240" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@logger" />
      <dbType value="String" />
      <size value="240" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%logger" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@message" />
      <dbType value="String" />
      <size value="240" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
      </layout>
    </parameter>
  </appender>
  <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
</log4net>

在log4net中日志记录方法有文本文件,WINDOWS日志,SQL数据库等等,你可以自己去配置,对于日志级别,它提供了fatal,error,warn,debug和info

你可以根据自己的需要进行选择。

     static JobBase()
        {
            log4net.Config.XmlConfigurator.Configure();//加载app.config中的配置
        }

        /// <summary>
        /// log4日志对象
        /// </summary>
        protected log4net.ILog Logger = log4net.LogManager.GetLogger("Core.Logger");

如果你的log4net不在app.config中配置,而是单独在指定的配置文件中,也可以使用下面的方法

 log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Environment.CurrentDirectory + @"\log4net.config"));

log4net也并非是完美,在使用上还有一些问题,但它应用面太广,被很多开源项目使用,所以,咱们也只好用它了,呵呵。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:我心中的核心组件(可插拔的AOP)~第三回 日志记录组件之log4net,如需转载请自行联系原博主。

时间: 2024-09-30 03:57:46

我心中的核心组件(可插拔的AOP)~第三回 日志记录组件之log4net的相关文章

我心中的核心组件(可插拔的AOP)~第一回 日志记录组件之自主的Vlog

对于.net环境而言,日志的开源组件有很多,像Nlog,log4net等等,而我今天要介绍的是我的日志组件VLog,呵呵,事实上实现原理与作用都大同小异. 作用:记录程序运行中的相关信息 特点:提供了消息日志,错误日志,调试日志,警告日志,崩溃日志等等 优势:提供了多种日志实现的方式,如SQL数据库,XML文本,WIN日志等等 配置:它可以通过配置文件进行设置,提供了日志级别和记录方式等参数 说明:VLog项目层次分明,一个接口,一个基类,5个实现的功能类,一切都是那么自然,下面看一下结构图:

我心中的核心组件(可插拔的AOP)~第二回 缓存拦截器

AOP面向切面的编程,也称面向方面的编程,我更青睐于前面的叫法,将一个大系统切成多个独立的部分,而这个独立的部分又可以方便的插拔在其它领域的系统之中,这种编程的方式我们叫它面向切面,而这些独立的部分,我们很早之前叫它部件,在SOA里,它叫做服务,而我认为叫它模块更加贴切,确实,这些与领域无关的东西,是像是一个个的功能模块. 之前讲过一个日志组件,有兴趣的同学可以查看:第一回 日志记录组件 今天主要说一下缓存组件,就是缓存模块,这些模块可以很方便的为每个方法添加缓存机制,事实上是在方法体执行之前,

我心中的核心组件(可插拔的AOP)~大话开篇及目录

核心组件 我心中的核心组件,核心组件就是我认为在项目中比较常用的功能,如日志,异常处理,消息,邮件,队列服务,调度,缓存,持久化,分布式文件存储,NoSQL存储,IoC容器,方法拦截等等. 对于以上内容可以说即是一个大餐,又是一个挑战,就让我带着大家去迎接这份挑战吧,呵呵! 可插拔的AOP AOP即面向切面的编程,是指将一个公用的与领域无关的组件抽象出来,方便在各个项目中使用.在微软很多项目中,基本都会有这种组件,它们叫它frameworks,或者叫core,从字面上看,就是核心的东西,而这些核

我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)

之前的讲过两篇关于日志组件的文章,分别是<第一回  日志记录组件之自主的Vlog>和<第三回  日志记录组件之log4net>,而今天主要说一下我自己开发的另一种日志组件Logger.Core,它也属于面试AOP(横切关注点)的一部分,这个组件对于一些想学习设计模式的同学来说,无疑是一个大餐!Logger.Core项目里内含了策略模式,模版方法模式,工厂模式和单例模式,可以说,最常用的模式都用到了,而它们在这个项目里都起到了什么作用,什么时候用到它们呢,这些答案相信在看完我的文章之

我心中的核心组件(可插拔的AOP)~调度组件quartz.net

quartz.net是一个任务调度组件,它可以灵活的设置你的调试方式,按时间,按日期,按周期都可以很容易的实现,quartz不仅可以用在web中,而且还可以部署在winform,winservice上,下面我们就来作一个简单的调试服务,我们以WEB环境为例,WEB端采用比较流行的MVC3实现. 首先需要引入三个组件DLL C5.DLL,log4net.DLL,Quartz.DLL,Common.Logging 对于WEB项目来说,调度的注入后我们可以放在global.asax里,它可以使我们的调

我心中的核心组件(可插拔的AOP)~第四回 异常拦截器

之前说过有关拦截器的文章,第二回  缓存拦截器,事实上,在那讲里说的最多是AOP和缓存组件,对于拦截的概念并没有详细的说明,这一讲,不说AOP,主要说一下拦截器,拦截器Interception,主要是在方法执行前或者执行后,动态添加一些行为,而这个行为主要包含缓存,日志,异常处理及你可以想到的所有的一切,呵呵. 这一讲是异常拦截器,它的主要意义在于,当你的一个方法被执行时,你可以通过配置文件去管理这个方法执行前与执行后是否附加统一异常处理行为. 拦截器组件我们还是用Unity.Intercept

我心中的核心组件(可插拔的AOP)~第十三回 实现AOP的拦截组件Unity.Interception

说在前 本节主要说一下Unity家族里的拦截组件,对于方法拦截有很多组件提供,基本上每个Ioc组件都有对它的实现,如autofac,它主要用在orchard项目里,而castle也有以拦截的体现,相关可以看我的Castle~实现IoC容器这篇文章,而今天主要说一个Unity里的方法拦截的实现,事实上本篇文章是对第二回 缓存拦截器的一个扩展和补充,对于unity这东西在微软的Nlayer项目里有所体现,它是基于DDD构架的,无论在架构选型还是技术选型上都很超前,也都结合了很大微软高手的心血,可读性

如何让移动硬盘插拔自如

  故障分析:我们在插拔移动硬盘的时候,当你使用之后, 需要在任务栏托盘区中的删除硬件图标将移动硬盘的图标删除掉.而经常会出现提示[现在无法停止通用卷设备.请稍候再停止该设备.]有时候会发现无法通过任务栏托盘区中的删除硬件图标将之删除掉,大部分人都会选择直接拔出来移动硬盘,而强行插拔又担心会损坏移动硬盘中的数据.如图所示: 故障解决: 一.xp系统操作步骤如下:在打开的 "系统属性"窗口中单击顶部的"硬件"标签,再单击其中的"设备管理器"按钮打开

stm32-STM32的JTAG下载器插拔后程序复位

问题描述 STM32的JTAG下载器插拔后程序复位 在用JTAG调试程序时,拔掉或者插上JTAG后,程序复位,有没有人遇到过此类情况,该怎么解决? 解决方案 http://www.51hei.com/mcu/1954.html