log4net 使用广泛,WinForm WebForm都可使用。
本文主要讲解 WebForm中 配置 log4net.(时间有限,不完整之处,后继补充)
log4net的使用,在下一篇讲解。


具体看个配置文件,然后讲解。

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

  <log4net debug="true">
   
    <!--Log存储目标 appender txtFile-->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <File value="d:\test.log" />
      <AppendToFile  value="true" />
      <RollingStyle value="Size" />
      <MaxSizeRollBackups value="10" />
      <MaximumFileSize value="200000KB" />
      <StaticLogFileName value="true" />
      <!--结构布局-->
      <layout type="log4net.Layout.PatternLayout">
        <Header value="Begin ...." />
        <Footer value="End ...." />
        <ConversionPattern value="%n %-5p %d %5rms %n - %-22.22c{1} %-18.18M %n - %m %n - " />
      </layout>
    </appender>
   

    <!--Log存储目标 appender DB-->
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <!--存入DB前,缓存的记录数量.1代表立即存入DB-->
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="data source=.;initial catalog=TestDB;integrated security=false;persist security info=True;User ID=sa;Password=wayne" />
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>


    <!--设定优先级、选择Log目标-->
    <root>
      <priority value="ALL" />
      <appender-ref ref="AdoNetAppender" />
      <!--
      <appender-ref ref="RollingLogFileAppender" />
      -->
    </root>
  </log4net>
</configuration>

 

<!--创建Log Table-->
<!--
    CREATE TABLE [dbo].[Log] (
    [Id] [int] IDENTITY (1, 1) NOT NULL PRIMARY KEY CLUSTERED,
    [Date] [datetime] NOT NULL,
    [Thread] [varchar] (255) NOT NULL,
    [Level] [varchar] (50) NOT NULL,
    [Logger] [varchar] (255) NOT NULL,
    [Message] [varchar] (4000) NOT NULL,
    [Exception] [varchar] (2000) NULL
    )
    -->

<!--配置Log4net-->
<!--
  WebForm 中配置 Log4net (以 log4net V 1.2.10.0 为例)
  
  首先把log4net.dll引入到你的项目References中。
  
  使用log4net需要知道其中两个比较重要的概念:logger 和 appender。
    logger是日志记录对象. appender是日志记录的目标,包括控制台,文件,定量大小的文件,远程广播。
  
    使用log4net的过程可以是这样的:

      1、在配置文件(*.config 或 *.xml)中配置appender,为logger对象指定日志的记录位置,
         (1)可以定义多个appender,每一个appender就是一个日志记录的目标。
         (2)只可以定义一个root节点,用于指定了选用哪一个 appender .
         (3)log4net的配置文件可以是独立的*.config或xml文件,也可以将配置写在web.config中。推荐使用独立的配置文件。(便于复用,下面的说明也是使用独立xml文件)
     
      2、在 Global.asax 、AssemblyInfo.cs中配置“配置文件的加载方式”。
     
      3、在需要使用log4net的class中,生成一个用来记录日志的工具对象logger,
 
详细说明:  
 
    1、配置文件的详细说明参考网络上的文章。包括如何配置文件存储、DB存储。
   
  2、使用独立配置文件(MyLog4Net.xml)时,加载配置文件的方式有2种
       
        第1种:简单,只使用 Globla.asax
       
            Globla.asax 中增加代码:
            protected void Application_Start(object sender, EventArgs e)
            {
                // 初始化日志配置,方式1
                //采用此方式,不需要在 AssemblyInfo.cs中配置 [assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = "MyLog4Net.xml", Watch = true)]  
                System.IO.FileInfo configPath = new System.IO.FileInfo(Server.MapPath("~/Mylog4Net.xml"));
                log4net.Config.XmlConfigurator.Configure(configPath);
               
            }
       
       
        第2种:稍复杂,同时使用 Globla.asax 和 AssemblyInfo.cs
       
            AssemblyInfo.cs 中增加代码:
                [assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = "MyLog4Net.xml", Watch = true)] //程序集属性,指明了配置文件路径.
           
            Globla.asax 中增加代码:
            protected void Application_Start(object sender, EventArgs e)
            {
                初始化日志配置,方式2
                采用此方式,需要在 AssemblyInfo.cs中配置 [assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = "MyLog4Net.xml", Watch = true)]  
                log4net.Config.XmlConfigurator.Configure();

            }
           
         这2种加载配置文件的方式,都指明了配置文件的路径。 一个在程序集属性那里指定,一个在Application_Start中指定。   
         (需要注意的是,低版本的log4net可能使用 log4net.Config.DOMConfigurator.Configure(); 加载配置文件)
           
           
     3、在需要使用log4net的class中添加代码
    
        private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);//使用反射,获得当前的Class
    
  
  好了,到此为止整个配置过程完成了
 -->

<!--

<File value="d:\test.log" /> 与  <param name="File" value="d:\test.log"> 等效 ,均可以。
<priority value="ALL" />     与  <param name="priority" value="ALL" /> 不等效,后者写法不对。

所以,不建议使用 param 写法。
另外,首字符大小写均可以。File 与 file 均可以。

-->

<!--
<conversionPattern value="%n %-5p %d %5rms %n - %-22.22c{1} %-18.18M %n - %m %n - " />
des:
  %n 换行符
  %-5p 日志类型 eg Error Warning ...
  %-22.22c{1} 类名 _Default
  %-18.18M  方法名 bt1_Click
  %d 时间精确到毫秒 eg: 2011-03-17 11:26:05,275
  %5rms 毫秒  eg; 2618ms
-->