Log4net日志组件

 Log4net简介

    Log4net是基于.net开发的一款非常著名的记录日志开源组件。他最早是20017月由NeoWorks Limited启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-log4jLog4net记录日志的功能非常强大。它可以将日志分不同的等级,比不同的样式,将日志输出到不同的媒介。

    Log4net可以从http://logging.apache.org/log4net/download.html网站下载最新版本。

 

 Log4net核心组成

    Log4net主要由五个部分组成,分别为LoggerAppenders, Filters, Layouts Object Renders

一) Logger(日志)

1 记录日志的分类:

Log4net能够以多种方式输出日志。支持的日志输出常用的主要媒介有数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite,控制台,文件,事件日志(可以用事件查看器查看)和邮件等多种方式。

2 日志的级别

Log4net支持多种级别的日志。优先级从高到低依次排列如下:

FATAL > ERROR > WARN > INFO > DEBUG

此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别。

二)Appenders

Appenders决定日志输出的方式。

Appenders必须实现log4net.Appenders.IAppender接口。

Log4net目前支持的输出方式包括:
1 AdoNetAppender
    
将日志记录到数据库中。可以采用SQL和存储过程两种方式。

2 AnsiColorTerminalAppender
    
ANSI 窗口终端写下高亮度的日志事件。

3 AspNetTraceAppender
    
能用asp.netTrace的方式查看记录的日志。

4 BufferingForwardingAppender
    
在输出到子Appenders之前先缓存日志事件。

5 ConsoleAppender
    
将日志输出到控制台。

6 EventLogAppender
    
将日志写到Windows Event Log. 

7 FileAppender
    
将日志写到文件中。

8 LocalSyslogAppender
    
将日志写到local syslog service (仅用于UNIX环境下
). 
9 MemoryAppender
    
将日志存到内存缓冲区。

10 NetSendAppender
    
将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

11 RemoteSyslogAppender
    
通过UDP网络协议将日志写到Remote syslog service

12 RemotingAppender
    
通过.NET Remoting将日志写到远程接收端。

13 RollingFileAppender
    
将日志以回滚文件的形式写到文件中。

14 SmtpAppender
    
将日志写到邮件中。

15 TraceAppender
    
将日志写到.NET trace 系统。

16 UdpAppender
    
将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。 

三)Filters

Appender对象将日志以缺省的方式传到输出流,然后Filter可以按照不同的标准控制日志的输出。Filter可以再配置文件中配置。最简单的形式是在appender中写明一个Threshold.这样只有级别大于或等于此Threshold的日志才被记录。

Filters必须实现log4net.Filters.IFilter接口。

四)Layouts

Layouts控制日志显示的格式样式。日志的显示格式如下:

"%timestamp [%thread] %-5level %logger - %message%newline"

Timestamp: 表示程序已经开始执行的时间。 单位[毫秒]

Thread:执行当前代码的线程。

Level:日志的级别。

Logger:日志相关请求的名称。

Message: 日志消息。

Layouts还可以控制日志的输出样式,比如以普通形式或以xml等形式输出。

五)Object Renderers

这是很重要的一项,log4net将按照用户定义的标准输出日志消息。

Object Renders必须实现log4net.ObjectRenderer.IObjectRenerer接口。

 

 如何在项目中使用log4net

1.        添加Log4net.dll应用

VS打开项目,在其资源管理器中,右击引用,左击"添加引用",如下图所示 

出现下图所示的对话框,点击浏览,找到Log4net.dll文件所在的位置,然后点击确定。 

在资源管理器的引用文件夹下,就可以看到Log4net了,说明添加引用成功,如下图所示。

 

2.       新建配置文件,并命名为“log4net.config”。

l         配置log4net.config文件:

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

<configuration>

  <!--日志配置部分-->

  <configSections>

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>

  </configSections>

  <!--站点日志配置部分-->

  <log4net>

    <!-- Setup the root category, add the appenders and set the default level -->

    <root>

      <level value="ALL"/>

      <appender-ref ref="ADONetAppender_SqlServer"/>

      <appender-ref ref="RollingLogFileAppender"/>

      <appender-ref ref="EventLogAppender"></appender-ref>

      <appender-ref ref="AdoNetAppender_Access"></appender-ref>

      <appender-ref ref="ColoredConsoleAppender"></appender-ref>

      <appender-ref ref="FileAppender"></appender-ref>

    </root>

    <logger name="startLog">

      <level value="ALL"/>

      <appender-ref ref="RollingLogFileAppender"/>

      <appender-ref ref="ADONetAppender_SqlServer"/>

    </logger>

    <!--写入到数据库-->

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

      <!--<bufferSize value="10" />-->

      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

      <connectionString value="Server=./SQLEXPRESS;UID=log;PWD=log;DataBase=db_log;Max Pool Size=1000"/>

      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)"/>

      <parameter>

        <parameterName value="@log_date"/>

        <dbType value="DateTime"/>

        <!--

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

                    <conversionPattern value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />

                </layout>

                -->

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

    <!--写入到文件-->

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

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

      <!--<file name="Client.Logging" value="log/log" />-->

      <file value="log/log" />

      <!--是否覆盖-->

      <appendToFile value="true"/>

      <!--设置无限备份=-1 ,最大备份数为1000-->

      <maxSizeRollBackups value="1000"/>

      <!--每个文件的最大20k-->

      <maximumFileSize value="20"/>

      <!--名称是否可以更改 为false为可以更改-->

      <param name="StaticLogFileName" value="false" />

      <!--文件名称-->

      <param name="DatePattern" value="yyyyMMdd&quot;.txt&quot;" />

      <param name="RollingStyle" value="Composite" />

      <!--<param name="RollingStyle" value="Composite" />-->

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

        <param name="ConversionPattern" value="%d [%r] [%t] %-5p %c  - %m%n%n" />

      </layout>

    </appender>

    <!--写入到操作系统-->

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

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

      <bufferSize value="1" />

      <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D://工作目录//代码//Demo//LogDemo//db//access.mdb;User Id=;Password=;" />

      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />

      <parameter>

        <parameterName value="@log_date" />

        <dbType value="String" />

        <size value="255" />

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

          <conversionPattern value="%date" />

        </layout>

      </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="1024" />

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

          <conversionPattern value="%message" />

        </layout>

      </parameter>

    </appender>

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

      <mapping>

        <level value="ALL" />

        <foreColor value="White" />

        <backColor value="Red, HighIntensity" />

      </mapping>

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

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

      </layout>

    </appender>

    <!--写入到文件,是累加,不生成新的文件-->

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

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

      <appendToFile value="false" />

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

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

      </layout>

    </appender>

  </log4net>

  <system.web>

    <!--

            设置 compilation debug="true" 将调试符号插入

            已编译的页面中。但由于这会

            影响性能,因此只在开发过程中将此值

            设置为 true

        -->

    <compilation debug="true"/>

    <!--

            通过 <authentication> 节可以配置 ASP.NET 使用的

            安全身份验证模式,

            以标识传入的用户。

        -->

    <authentication mode="Windows"/>

    <!--

            如果在执行请求的过程中出现未处理的错误,

            则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,

            开发人员通过该节可以配置

            要显示的 html 错误页

            以代替错误堆栈跟踪。

 

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">

            <error statusCode="403" redirect="NoAccess.htm" />

            <error statusCode="404" redirect="FileNotFound.htm" />

        </customErrors>

        -->

  </system.web>

</configuration>

 

说明:

1)标签configSections中是对下面标签log4net的声明

2logger是应用程序需要交互的主要组件,它用来产生日志消息。其中的level是日志的级别,我们可以用到的有五级——FATALERORWARNINFODEBUG(优先级别由高到低),在日志中记录的是高于(含等于)此处记录的日志级别的信息(如程序中如果调用的是DEBUG将不被记录);appender-ref是对appender的声明。

3appender用来所有的日志事件传递到输出流

 

3.       添加服务器端方法。

l         在文件AssemblyInfo.cs下面加入

[assembly:log4net.Config.XmlConfigurator(ConfigFile="log4net.config",Watch=true)] 

这段代码的作用是将程序与上面的配置文件关联起来。

如果是winform程序,代码如下:

[assembly:log4net.Config.XmlConfigurator(ConfigFileExtension="config",Watch=true)]

如果是网站:

       global.asax里面新增配置

       void Application_Start(object sender, EventArgs e)

           {

               // 在应用程序启动时运行的代码

               log4net.Config.XmlConfigurator.Configure();

           }

l         你就可以通过实现ILog接口去创建日志对象,然后调用相应的方法对日志进行操作。

l         实例:

       引入命名空间:using log4net;

            protected void Page_Load(object sender, EventArgs e)

            {

                 ILog log = LogManager.GetLogger("startLog");//此处要与配置文件中的logger

//的名字相同,这里常用来跟踪类,因此常以typeof(className)作为参数

                 log.Info("hello world!");

            }

l         logger的方法。

          log.Debug("debug"); //logger的方法,与上面提到的五个级别相对应,这里的参数是object类型

          log.Info("info");

          log.Warn("warn");

          log.Error("error");

以上代码加入相应的位置就可以了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值