log4net 使用详解

 一、   首先说明一点的是,log4net解决的问题是提供一个记录日志的框架,它提供了向多种目标写入的实现,比如利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中,一般来说我们只需要提供一个描述性的字符串,然后log4net就会自动提供有关运行时的一些信息。

    二、log4net下载:

http://logging.apache.org/log4net/download_log4net.cgi

    项目中引用log4net的DLL即可。

   三、 log4net配置说明:

    首先要添加config文件,在类库项目、命令行程序及WinForm中添加的是app.config,在WebForm中添加的是web.config。为模块化配置,在项目中可添加log4net.xml类型文件,独立存放log4net相关配置信息。

    配置步骤:

        1)在config文件中的配置:基本配置

            要使用log4net,首先要在config文件的<configSections>节点中增加配置(如果没有这个节点请手动增加),如下:    

<configSections>
<section name ="logenet" type = "System.Configuration.IgnoreSectionHandler"/>
</configSections>

2) 日志记录方式配置

     有2种方式实现日志记录方式的配置

        a、在config文件中的顶级节点<configuration>下增加<log4net>子节点。在<log4net>节点下就可以增加 <appender>子节点,每个<appender>子节点代表一种记录日志的方式

      b、在项目中添加 log4net.xml类型文件,在该文件中配置记录方式,在program.cs文件中指定配置方式所在的文件即可,代码参考如下

 log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Application.StartupPath + "
\\log4net.xml
"));

   log4net.xml文件 内容如下:

<?xml version="1.0" encoding="utf-8" ?>

<log4net>……<log4net>

   其上省略号部分为具体配置的<appender>子节点,每个字节点代表一种记录日志的方式。

具体日志记录方式配置说明如下:

    FileAppender:将日志写到文件中,对于一个长时间使用并且有大量业务日志的系统来说,如果使用FileAppender将日志一直记录到一个文件中会引起性能低下的问题,在这种情况下可考虑使用RollingFileAppender循环记录日志,一种是指定文件的最大长度,如果超过了就重新生成一个文件,如下面的配置:

RollingFileAppender回滚文件日志格式如下:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">

      <file value="RollingFileAppender_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] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />

      </layout>

    </appender>

:在上面的配置中,每个日志文件最大100KB,最大日志文件个数是10生成的日志文件名会是RollingFileAppender_log.txt.1, RollingFileAppender_log.txt.2 ... RollingFileAppender_log.txt.10,如果记录的日志超过10个,会从RollingFileAppender_log.txt.1开始覆盖。

RollingLogFileAppender_DateFormat:按照日期进行日志文件记录。配置如下:

<appender name="RollingLogFileAppender_DateFormat" type="log4net.Appender.RollingFileAppender">

      <file value="log4net\RollingLogFileAppender_DateFormat_log.txt" />

      <appendToFile value="true" />

      <rollingStyle value="Date" />

      <!--<datePattern value="yyyyMMdd-HHmm" />-->

      <datePattern value="yyyyMMdd" />

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

        <conversionPattern value="%date [%thread](%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />

      </layout>

    </appender>

:每天的日志都写入到一个文件中,当天的日志文件名为“RollingLogFileAppender_DateFormat_log.txt”,非当天的日志都会带上当天的日期,如“RollingLogFileAppender_DateFormat_log.txt20101117”表示2010年11月17日的日志,这样就可以很方便地区分每天的日志了,将来查找起来也相当方便。

关于数据库的支持:

log4net是支持包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite在内的数据库的,如果是文件型数据库(如Access或SQLite)的话就需要指定数据库文件的位置(在Web中最好指定在有读写权限的文件夹下,并且实现创建好表),如果是网络数据库就需要指定正确的数据库连接字符串。

比如要记录到Oracle数据库中,在配置文件中可以增加一个< appender>节点,配置如下:

 

 

 <!--记录到SQLite这样的单机数据库中去  

    创SQLite表的SQL语句:  

    CREATE TABLE Log (  

    LogId        INTEGER PRIMARY KEY,  

    Date        DATETIME NOT NULL,  

    Level        VARCHAR(50) NOT NULL,  

    Logger        VARCHAR(255) NOT NULL,  

    Source        VARCHAR(255) NOT NULL,  

    Message        TEXT DEFAULT NULL  

    );  

    -->

    <appender name="AdoNetAppender_SQLite" type="log4net.Appender.AdoNetAppender">

      <bufferSize value="100" />

      <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.66.0, Culture=neutral" />

      <!--SQLite连接字符串-->

      <connectionString value="Data Source=c://log4net.db;Version=3;" />

      <commandText value="INSERT INTO Log (Date, Level, Logger,Source, Message) VALUES (@Date, @Level, @Logger, @Source, @Message)" />

      <parameter>

        <parameterName value="@Date" />

        <dbType value="DateTime" />

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

      </parameter>

      <parameter>

        <parameterName value="@Level" />

        <dbType value="String" />

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

          <conversionPattern value="%level" />

        </layout>

      </parameter>

      <parameter>

        <parameterName value="@Logger" />

        <dbType value="String" />

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

          <conversionPattern value="%logger" />

        </layout>

      </parameter>

      <parameter>

        <parameterName value="@Source" />

        <dbType value="String" />

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

          <conversionPattern value="%file:%line" />

        </layout>

      </parameter>

      <parameter>

        <parameterName value="@Message" />

        <dbType value="String" />

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

          <conversionPattern value="%message" />

        </layout>

      </parameter>

    </appender>

    <!--定义输出到SQL Server数据库中-->

    <!--  

    在SQL Server中创建表的SQL语句  

    CREATE TABLE [dbo].[Log] (  

    [Id] [int] IDENTITY (1, 1) NOT NULL,  

    [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  

);  

    -->

    <appender name="AdoNetAppender_SQLServer" type="log4net.Appender.AdoNetAppender">

      <bufferSize value="100" />

      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data" />

      <connectionString value="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" />

      <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>

    <!--定义输出到Oracle9i中-->

    <!--  

    在Oracle9i中创建表的SQL语句  

    create table log (  

   Datetime timestamp(3),  

   Thread varchar2(255),  

   Log_Level varchar2(255),  

   Logger varchar2(255),  

   Message varchar2(4000)  

   );  

    -->

    <appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">

      <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient" />

      <connectionString value="data source=[mydatabase];User ID=[user];Password=[password]" />

      <commandText value="INSERT INTO Log (Datetime,Thread,Log_Level,Logger,Message) VALUES (:log_date, :thread, :log_level, :logger, :message)" />

      <bufferSize value="128" />

      <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>

    </appender>

 

 

 

log4net 详细说明:

http://www.cnblogs.com/zhangchenliang/p/4546352.html

  

 

    

 

 

 

 

转载于:https://my.oschina.net/u/1439068/blog/609135

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值