Log4Net

Log4Net介绍  

 log4net是一个功能著名的开源日志记录组件。通过它可以将.net应用程序的日志记录到多种介质之中,包括:文件、控制台、window事物日志和数据库中(MS SQL Server、Access、Oracle9i、DB2、SQLite)中,并且我们还可以设置和标示日志的级别等。

            和其它大多开源组件一样,log4net也是从Java项目过度而来。log4net来源于java应用中的log4J.

           log4net的官方网站:http://logging.apache.org/

           最新版本的下载地址:http://logging.apache.org/log4net/download_log4net.cgi  目前最新的版本是:1.2.11

(一) 特性:

       (1) 开源,源代码可见。

       (2)兼容多种.net框架(.Net1.0,2.0,3.0,3.5,4.0)

       (3)支持多种日志信息输出方式和日志信息格式定制

        (4)支持xml动态配置和对整个日志过程配置管理

        (5)模块化设计和可扩展性强(接口)

         (6)具有较高的灵活性和性能

(二)核心组件

     log4net的有4种核心组件:

         (1)logger,记录器

         (2)Appender,附着器

         (3)Layout,布局

         (4)Repository(库),

(三)日志的级别

    log4net为我们提供了7种日志级别,优先级从高到底如下表:

级别

允许的方法

Boolean属性

优先级别

OFF

 

 

Highest

FATAL

void Fatal(...);

bool IsFatalEnabled;

 

RROR

void Error(...);

bool IsErrorEnabled;

 

WARN

void Warn(...);

bool IsWarnEnabled;

 

INFO

void Info(...);

bool IsInfoEnabled;

 

DEBUG

void Debug(...);

bool IsDebugEnabled;

 

ALL

 

 

Lowest

       在log4net框架里,通过设置配置文件,每个日志对象都被分配了一个日志优先级别。如果没有给一个日志对象显式地分配一个级别,那么该对象会试图从他的祖先继承一个级别值。(配置里面的root结点)

       举例说明,当你创建了一个日志对象,并且把他的级别设置为INFO。于是框架会设置日志的每个Boolean属性。当你调用相应的日志方法时,框架会检查相应的Boolean属性,以决定该方法能不能执行。如下的代码:

Logger.Info("message");

Logger.Debug("message");

Logger.Warn("message");

对于第一种方法,Info()的级别等与日志的级别(INFO),因此日志请求会被传递,我们可以得到输出结果”message”。

对于第二种方法,Debug()的级别低于日志对象logger的日志级别(INFO),因此,日志请求被拒绝了,我们得不到任何输出。同样的,针对第三行语句,我们可以很容易得出结论。

在表1中有两个特殊的级别:ALL和OFF。ALL表示允许所有的日志请求。OFF是拒绝所有的请求。

你也可以显式地检查Logger对象的Boolean属性,如下所示:

if (logger.IsDebugEnabled)

{

  Logger.Debug("message");

}

(四)logger

    Logger是应用程序需要交互的主要组件,它用来产生日志消息。产生的日志消息并不直接显示,还要预先经过Layout的格式化处理后才会输出。

这一部分,也是和用户在代码层直接交互的本分,常规的用法如下:

Log4net框架定义了一个叫做LogManager的类,用来管理所有的logger对象。它有一个GetLogger()静态方法,用我们提供的名字参数来检索已经存在的Logger对象。如果框架里不存在该Logger对象,它也会为我们创建一个Logger对象。代码如下所示:

log4net.ILog log = log4net.LogManager.GetLogger("logger-name");

通常来说,我们会以类(class)的类型(type)为参数来调用GetLogger(),以便跟踪我们正在进行日志记录的类。传递的类(class)的类型(type)可以用typeof(Classname)方法来获得,或者可以用如下的反射方法来获得:

System.Reflection.MethodBase.GetCurrentMethod().DeclaringType

尽管符号长了一些,但是后者可以用于一些场合,比如获取调用方法的类(class)的类型(type)。

 

(五)Appender

        一个好的日志框架应该能够产生多目的地的输出。比如说输出到控制台或保存到一个日志文件。log4net 能够很好的满足这些要求。它使用一个叫做Appender的组件来定义输出介质。正如名字所示,这些组件把它们附加到Logger日志组件上并将输出传递到输出流中。你可以把多个Appender组件附加到一个日志对象上。 Log4net框架提供了几个Appender组件。关于log4net提供的Appender组件的完整列表可以在log4net框架的帮助手册中找到。有了这些现成的Appender组件,一般来说你没有必要再自己编写了。但是如果你愿意,可以从log4net.Appender.AppenderSkeleton类继承。

(六)Layout

        Layout 组件用于向用户显示最后经过格式化的输出信息。输出信息可以以多种格式显示,主要依赖于我们采用的Layout组件类型。可以是线性的或一个XML文件。Layout组件和一个Appender组件一起工作。API帮助手册中有关于不同Layout组件的列表。一个Appender对象,只能对应一个Layout对象。要实现你自己的Layout类,你需要从log4net.Layout.LayoutSkeleton类继承,它实现了ILayout接口。

(七)Repository

       Repository主要用于负责日志对象组织结构的维护。在log4net的以前版本中,框架仅支持分等级的组织结构(hierarchical organization)。这种等级结构本质上是库的一个实现,并且定义在log4net.Repository.Hierarchy 名字空间中。要实现一个Repository,需要实现log4net.Repository.ILoggerRepository 接口。但是通常并不是直接实现该接口,而是以log4net.Repository.LoggerRepositorySkeleton为基类继承。体系库 (hierarchical repository )则由log4net.Repository.Hierarchy.Hierarchy类实现。

如果你是个log4net框架的使用者,而非扩展者,那么你几乎不会在你的代码里用到Repository的类。相反的,你需要用到LogManager类来自动管理库和日志对象。

 

在后面一节将详log4net的配置文件使用以及各个结点的配置。



log4net配置使用说明 


(一)log4net的标准配置文档示例

<?xmlversion="1.0"encoding="utf-8" ?>

<configuration>

  <configSections>

    <sectionname="log4net"

             type="log4net.Config.Log4NetConfigurationSectionHandler" />

  </configSections>

  <log4net>

    <root>

      <levelvalue="WARN" />

      <appender-refref="LogFileAppender" />

      <appender-refref="ConsoleAppender" />

    </root>

    <loggername="testApp.Logging">

      <levelvalue="DEBUG"/>

    </logger>

    <appendername="LogFileAppender type="log4net.Appender.FileAppender" >

      <paramname="File"value="log-file.txt" />

      <paramname="AppendToFile"value="true" />

      <layouttype="log4net.Layout.PatternLayout">

        <paramname="Header"value="[Header]&#13;&#10;"/>

        <paramname="Footer"value="[Footer]&#13;&#10;"/>

        <paramname="ConversionPattern"  value="%d [%t] %-5p %c[%x]  - %m%n" />

      </layout>

      <filtertype="log4net.Filter.LevelRangeFilter">

        <paramname="LevelMin"value="DEBUG" />

        <paramname="LevelMax"value="WARN" />

      </filter>

    </appender>

    <appendername="ConsoleAppender"   type="log4net.Appender.ConsoleAppender" >

      <layouttype="log4net.Layout.PatternLayout">

        <paramname="ConversionPattern"  value="%d [%t] %-5p %c [%x] -%m%n" />

      </layout>

    </appender>

  </log4net>

</configuration>

(二)log4net配置文件与程序的关联

         log4net的配置可以放在应用程序的默认配置文件中(app.configweb.config),也可以在自己指定的配置文件中。log4net框架中是使用log4net.Config.XmlConfigurator在程序集的级别上定义配置文件。

      1winform程序中,如果配置在app.config文件中,配置文件的结构如示例。这时找到当前项目的Assemblyinfo.cs文件添加

          [assembly:log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch= true)]  app.config文件属性设置保持默认。

      2winform程序中,如果配置在自定义文件中如“Config.txt”中。这时找到当前项目的Assemblyinfo.cs文件添加

          [assembly:log4net.Config.XmlConfigurator(ConfigFile="config.txt", Watch =true)]   Config.txt文件的属性要设置为复制。就是要输出到输出目录。

         这个时候配置可以省略示例模版中<configSection>节点里的<section>节点。

      

         ConfigFile:指出了我们的配置文件的路径及文件名,包括扩展名。

         ConfigFileExtension:如果我们对被编译程序的程序集使用了不同的文件扩展名,那么我们需要定义这个属性,缺省的,程序集的配置文件扩展名为”config”

           Watch (Boolean属性): log4net框架用这个属性来确定是否需要在运行时监视文件的改变。如果这个属性为true,那么FileSystemWatcher将会被用来监视文件的改变,重命名,删除等事件。

         其中:ConfigFileConfigFileExtension属性不能同时使用,ConfigFile指出了配置文件的名字,例如,ConfigFile=”Config.txt”

ConfigFileExtension则是指明了和可执行程序集同名的配置文件的扩展名,例如,应用程序的名称是”test.exe”,ConfigFileExtension=”txt”,则配置文件就应该是”test.exe.txt”

      也可以在程序代码中用DOMConfigurator类打开配置文件。类的构造函数需要一个FileInfo对象作参数,以指出要打开的配置文件名。这个方法和前面在程序集里设置属性打开一个配置文件的效果是一样的。

         log4net.Config.DOMConfigurator.Configure(newFileInfo("TestLogger.Exe.Config"));

         DOMConfigurator类还有一个方法ConfigureAndWatch(..),用来配置框架并检测文件的变化。

(二)节点分析

         在配置章节中,定义section节点。节点名称为:须为log4net,且大小写敏感。

         <configSections>

                    <sectionname="log4net"

                              type="log4net.Config.Log4NetConfigurationSectionHandler" />

         </configSections>

(三)log4net节点说明

       1)节点支持的属性,debug,update,threshold三个属性

         debug 可选,取值是truefalse,默认是false。设置为true,开启log4net的内部调试。

         update可选,取值是Merge(合并)Overwrite(覆盖),默认值是Merge。设置为Overwrite,在提交配置的时候会重置已经配置过的库。  

         threshold可选,取值是repository(库)中注册的level,默认值是ALL

      2)支持子元素

       appender  0或多个

         logger 0或多个

         renderer 0或多个

         root 最多一个

         param 0或多个

 

(四)root节点说明  

      1logger,所有其它logger都默认继承它。root元素没有属性。

      2)支持的子元素

                   appender-ref 0个或多个,要引用的appender的名字。

·                  level 最多一个。只有在这个级别或之上的事件才会被记录。

·                  param 0个或多个,设置一些参数。

                   <root>

                             <levelvalue="WARN" />

                            <appender-refref="LogFileAppender" />

                            <appender-refref="ConsoleAppender" />

                    </root>

(五)Logger节点说明

         1)支持的属性name,Additivity两个属性       

           name必须的,logger的名称

          additivity 可选,取值是truefalse,默认值是true。设置为false时将阻止父logger中的appender

       2)支持的子元素:

         appender-ref 0个或多个,要引用的appender的名字。

          ·level最多一个。只有在这个级别或之上的事件才会被记录。

          ·param 0个或多个,设置一些参数。

         例如:<loggername="testApp.Logging">

                           <levelvalue="DEBUG"/>

                       </logger>

 

(六)Appender节点说明

      1)定义日志的输出方式,只能作为 log4net 的子元素。name属性必须唯一,type属性必须指定。支持name,type两个属性。

                   name 必须的,Appender对象的名称

                   type 必须的,Appender对象的输出类型

         2)支持的子元素:

·                  appender-ref 0个或多个,允许此appender引用其他appender,并不是所以appender类型都支持。

                   ·filter 0个或多个,定义此app使用的过滤器。

                   ·layout 最多一个。定义appender使用的输出格式。

·                  param 0个或多个,设置Appender类中对应的属性的值。

           例如: LogFileAppender 节点日志文件输出。type="log4net.Appender.FileAppender"

                           ConsoleAppender节点控制台输出。type="log4net.Appender.ConsoleAppender"  

(七)Filter节点说明

         过滤器,只能作为<appender>的子元素。

         支持的属性:

                   type 必须的,Filter的类型

                   支持的子元素:param 0个或多个,设置一些参数。

(八)Layout节点说明

         布局,只能作为<appender>的子元素。

         支持的属性:

                   type 必须的,Layout的类型

 

                   支持的子元素:param 0个或多个,设置一些参数。

(九)Param

         <param>元素可以是如何元素的子元素。

 

         支持的属性:

                   name 必须的,取值是父对象的参数名。

                   value 可选的,valuetype中,必须有一个属性被指定。value是一个能被转化为参数值的字符串。

                   type 可选的,valuetype中,必须有一个属性被指定。type是一个类型名,如果type不是在log4net程序集中定义的,就需要使用全名。

                   支持的子元素:param 0个或多个,设置一些参数。

(十)Log4net xsd

        好多刚开始接触.Net不久的人一定会问.xsd文件是干嘛的?通俗点说这东西就是用来制定目标xm文档规则的,它是解释性的。大家一定有这个经验就是当你在App.config文件中写配置文件时会自动出现智能提示,而且在书写不规范或错误时还会出现警告。在后台其作用的就是对应的.xsd文件。好了不聊这个了,为了让我们在编辑log4Net配置文件时,也能有对应的提示和纠错功能。下面是我找到的log4net.xsd文件(郁闷,好像不能直接上传。哎)

log4net.xsd

使用方法是,把这个文件拷贝到D:\Program Files\Microsoft Visual Studio 8\Xml\Schemas目录下(根据你vs的安装目录修改地址),在配置log4net结点时,加上xmlns="urn:log4net"的命名空间。就可以获得智能提示和正确的错误提醒。

<log4net xmlns="urn:log4net">




log4net示例1-最简单的按日期分类保存日志Console程序  


目标:

      通过使用Log4net框架,创建按日期分类输出日志在文本文件的示例程序。

需求:

      1 使用log4net框架提供的日志功能,进行系统的日志管理。

      2 每一天的日志用一个对应的日志文本去存储。(日志文本名称按日期进行区别)

需求分析:

       1 整备log4net.dll组件库  

       2 由于使用的是回滚文件记录日志的方式,所以Appender选择:RollingFileAppender.

 回滚形式:日期。

         日期格式初步定为:yyyyMMdd-HHmmm

具体实施:

     (1)创建一个控制台c#应用程序

      (2)添加log4net.dll引用

      (3)在项目中添加一个文本文件,文件扩展名改为:log.set,注意:要将此文件的属性设置为:如有较新的则复制

  文件的内容为:

<?xml version="1.0" encoding="utf-8" ?>
<log4net xmlns="urn:log4net">
  <root xmlns="">
    <level value="ALL" />
    <appender-ref ref="RollingLogFileAppender" />
  </root>
  <appender xmlns="" name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="log\\Log_"/>
    <param name="AppendToFile" value="true"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>    <!--关于这里参数设置-->
    </layout>
  </appender>
</log4net>

(4)在项目的AssembleInfo.cs文件中添加:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log.set", Watch = true)]

        (5)编码

               a. 在你的Program文件中添加:using:log4net

               b.在你的Main函数中拷贝下列代码

            ILog log = log4net.LogManager.GetLogger(typeof(Program)); 
            Random random = new Random();
            for (int i = 0; i < 2; i++)
            {
                //记录错误日志 
                if (log.IsErrorEnabled)
                    log.Debug("你引起了一个错误,错误ID为:"+random.Next().ToString());


                //记录严重错误  
                if(log.IsFatalEnabled)
                    log.Fatal("你引发了一个总结者错误,可能导致系统终止,ID为:"+random.Next().ToString()); 
                //记录一般信息 
                if (log.IsInfoEnabled)
                    log.Info("你计划记录一个信息,id为:"+random.Next().ToString());  
                //记录调试信息  
                if (log.IsDebugEnabled)
                    log.Debug("调试信息,调试ID为:" + random.Next().ToString());
                //记录警告信息 
                if (log.IsWarnEnabled)
                {
                    log.Warn("警告:警告ID为:" + random.Next().ToString());
                }
            }

        (6)测试,隔一天运行一次你的控制台应用程序。假设我昨天运行了一次,今天运行了一次。那么在程序的bin\debug目录下就会出现一个log文件夹,文件夹中会出现两个文本文件“Log_20120427.log” 和“Log_20120428”。 打开其中一个文件就可以看到日志记录。

 很想把示例程序上传,无赖csdn太不好使了。后边会提供示例下载链接

         (7)下面是几种常用的回滚日志存储方式,

         (搜集)

RollingFileAppender主要是基于FileAppender构建的,很多属性方法都是继承于FileAppender,所以在选项设置上,也有许多是相同的.

下面的例子使日志文件名为log.txt,日志文件名是以文件大小进行变换的,如果旧日志文件大小到100KB时,就会变换文件名为log.txt.1,log.txt.2,log.txt.3...,一直到10为止

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">   
        <!--日志文件名--> 
    <file value="log.txt"/> 
    <!--是否在文件中追加--> 
    <appendToFile value="true"/> 
    <!--按照文件的大小进行变换日志文件--> 
    <rollingStyle value="Size"/> 
    <!--最大变换数量--> 
    <maxSizeRollBackups value="10"/> 
    <!--最大文件大小--> 
    <maximumFileSize value="100KB"/> 
    <!--日志文件名是否为静态--> 
    <staticLogFileName value="true"/> 
    <layout type="log4net.Layout.PatternLayout"> 
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> 
    </layout> 
</appender>
下面的例子以时间周期变换日志文件名,每分钟都改变日志的文件名,日志文件名为logfileyyyyMMdd-HHmm,这里补充说明下,如果要在这个文件名后面加上.log后缀,必须使用转义字符,比如<datePattern value="yyyyMMdd-HHmm&quot;.log&quot;" />

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
        <!--日志文件名开头--> 
    <file value="logfile" /> 
    <!--是否追加到文件--> 
    <appendToFile value="true" /> 
    <!--变换的形式为日期--> 
    <rollingStyle value="Date" /> 
    <!--日期的格式--> 
    <datePattern value="yyyyMMdd-HHmm" /> 
    <layout type="log4net.Layout.PatternLayout"> 
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender>
下面的例子综合使用使用日期和文件大小变换日志文件名。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <!--日志文件名开头--> 
    <file value="logfile" /> 
    <!--是否追加到文件--> 
    <appendToFile value="true" /> 
    <!--混合使用日期和文件大小变换日志文件名--> 
    <rollingStyle value="Composite" /> 
    <!--日期的格式--> 
    <datePattern value="yyyyMMdd" /> 
    <!--最大变换数量--> 
    <maxSizeRollBackups value="10" /> 
    <!--最大文件大小--> 
    <maximumFileSize value="1MB" /> 
    <layout type="log4net.Layout.PatternLayout"> 
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender>
下面例子是在每次程序运行的时候,都会备份原先的日志文件,当运行的日志文件大于50G的时候才会变换日志文件名。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <!--日志文件名--> 
    <file value="logfile.txt" /> 
    <!--不追加到原文件--> 
    <appendToFile value="false" /> 
    <!--以日志文件大小变换文件名--> 
    <rollingStyle value="Size" /> 
    <!--最大变换数量,-1为不限制--> 
    <maxSizeRollBackups value="-1" /> 
    <!--最大文件大小--> 
    <maximumFileSize value="50GB" /> 
    <layout type="log4net.Layout.PatternLayout"> 
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender>
下面是RollingFileAppender类中的部分Public Instance Properties(公共属性)的说明,没有全部测试,难免谬误,如果你知道,请不要吝啬告写。
CountDirection : 定义当前文件是最小编号的文件还是最大编号的文件。默认为-1,总是以更小的编号。
datePattern : DateFormatter日期格式,string类型。
Encoding : 就是文件的编码,默认为Default,就是程序本身的编码了。
FilterHead : 分割符头部。
ImmediateFlush : 表示是否立即输出到文件,布尔型的。
LockingModel : 文件锁类型,RollingFileAppender本身不是线程安全的,如果在程序中没有进行线程安全的限制,可以在这里进行配置,确保写入时的安全。有两中类型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
Name : 设置本Appander的名称。
SecurityContext : 比较少应用,对日志进行加密只类的,使用SecurityContextProvider转换。(对日志的保密要求比较高的时候应该可以应用上吧,Log4考虑的还挺周全)
Threshold : 设置内容级别的,比如:DEBUG,INFO等等。

RollingFileAppender主要是基于FileAppender构建的,很多属性方法都是继承于FileAppender,所以在选项设置上,也有许多是相同的.

下面的例子使日志文件名为log.txt,日志文件名是以文件大小进行变换的,如果旧日志文件大小到100KB时,就会变换文件名为log.txt.1,log.txt.2,log.txt.3...,一直到10为止

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">  
        <!--日志文件名-->
    <file value="log.txt"/>
    <!--是否在文件中追加-->
    <appendToFile value="true"/>
    <!--按照文件的大小进行变换日志文件-->
    <rollingStyle value="Size"/>
    <!--最大变换数量-->
    <maxSizeRollBackups value="10"/>
    <!--最大文件大小-->
    <maximumFileSize value="100KB"/>
    <!--日志文件名是否为静态-->
    <staticLogFileName value="true"/>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
    </layout>
</appender>
下面的例子以时间周期变换日志文件名,每分钟都改变日志的文件名,日志文件名为logfileyyyyMMdd-HHmm,这里补充说明下,如果要在这个文件名后面加上.log后缀,必须使用转义字符,比如<datePattern value="yyyyMMdd-HHmm&quot;.log&quot;" />

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <!--日志文件名开头-->
    <file value="logfile" />
    <!--是否追加到文件-->
    <appendToFile value="true" />
    <!--变换的形式为日期-->
    <rollingStyle value="Date" />
    <!--日期的格式-->
    <datePattern value="yyyyMMdd-HHmm" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
下面的例子综合使用使用日期和文件大小变换日志文件名。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志文件名开头-->
    <file value="logfile" />
    <!--是否追加到文件-->
    <appendToFile value="true" />
    <!--混合使用日期和文件大小变换日志文件名-->
    <rollingStyle value="Composite" />
    <!--日期的格式-->
    <datePattern value="yyyyMMdd" />
    <!--最大变换数量-->
    <maxSizeRollBackups value="10" />
    <!--最大文件大小-->
    <maximumFileSize value="1MB" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
下面例子是在每次程序运行的时候,都会备份原先的日志文件,当运行的日志文件大于50G的时候才会变换日志文件名。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志文件名-->
    <file value="logfile.txt" />
    <!--不追加到原文件-->
    <appendToFile value="false" />
    <!--以日志文件大小变换文件名-->
    <rollingStyle value="Size" />
    <!--最大变换数量,-1为不限制-->
    <maxSizeRollBackups value="-1" />
    <!--最大文件大小-->
    <maximumFileSize value="50GB" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
下面是RollingFileAppender类中的部分Public Instance Properties(公共属性)的说明,没有全部测试,难免谬误,如果你知道,请不要吝啬告写。
CountDirection : 定义当前文件是最小编号的文件还是最大编号的文件。默认为-1,总是以更小的编号。
datePattern : DateFormatter日期格式,string类型。
Encoding : 就是文件的编码,默认为Default,就是程序本身的编码了。
FilterHead : 分割符头部。
ImmediateFlush : 表示是否立即输出到文件,布尔型的。
LockingModel : 文件锁类型,RollingFileAppender本身不是线程安全的,如果在程序中没有进行线程安全的限制,可以在这里进行配置,确保写入时的安全。有两中类型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
Name : 设置本Appander的名称。
SecurityContext : 比较少应用,对日志进行加密只类的,使用SecurityContextProvider转换。(对日志的保密要求比较高的时候应该可以应用上吧,Log4考虑的还挺周全)
Threshold : 设置内容级别的,比如:DEBUG,INFO等等。



log4net相关设置说明 

(一)Log4net中的Appender类型

AdoNetAppender:利用ADO.NET记录到数据库的日志。
AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。
AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。
BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。
ConsoleAppender:将日志输出到控制台。
EventLogAppender:将日志写到Windows Event Log.
FileAppender:将日志写到文件中。
LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下).
MemoryAppender:将日志存到内存缓冲区。
NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。
RemotingAppender:通过.NET Remoting将日志写到远程接收端。
RollingFileAppender:将日志以回滚文件的形式写到文件中。
SmtpAppender:将日志写到邮件中。
TraceAppender:将日志写到.NET trace 系统。
UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。


(二)ConversionPattern相关参数设置

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
%f(file):输出语句所在的文件名。
%l(line):输出语句所在的行号。
%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。
下面以一个实际的例子来说明问题,比如在配置中有“%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline”,那么实际的日志中会是如下格式:
“记录时间:2010-11-17 16:16:36,561 线程ID:[9] 日志级别:文件:所在行ERROR 出错类:Log4NetDemo.Program property:[(null)] - 错误描述:error
System.Exception: 在这里发生了一个异常,Error Number:2036084948”


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值