天天看点

log4net 简介- 配置

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>

        <parameterName value="@thread" />

        <dbType value="String" />

        <size value="255" />

        <layout type="log4net.Layout.PatternLayout">

          <conversionPattern value="%thread" />

        </layout>

        <parameterName value="@log_level" />

        <size value="50" />

          <conversionPattern value="%level" />

        <parameterName value="@logger" />

          <conversionPattern value="%logger" />

        <parameterName value="@message" />

        <size value="4000" />

          <conversionPattern value="%message" />

        <parameterName value="@exception" />

        <size value="2000" />

        <layout type="log4net.Layout.ExceptionLayout" />

    <!--设定优先级、选择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)] //程序集属性,指明了配置文件路径.

                ////初始化日志配置,方式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

继续阅读