log4net入门简介

log4net是一个第三方的.NET开源日志记录组件,使用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库等介质中。

一、log4net四剑客

log4net记录日志的整个过程可由Logger、Appender、Layout、Filters四个对象完成,其中Logger负责日志发起,Appender负责指定日志存储介质,Layout负责对日志内容进行格式化,Filters负责对日志进行筛选,只有满足筛选条件的日志才会被记录。

1.Logger对象

Logger对象负责日志发起,这可通过调用对象Debug、Info、Warn、Error、Fatal 五个方法中任意一个方法来完成:

void Debug(object message);
void Info(object message);
void Warn(object message);
void Error(object message);
void Fatal(object message);

有的朋友就会奇怪了:写一个方法来发起不就可以了,为什么要五个?这正是log4net的一个优点,在一个应用程序生命周期的不同阶段中,我们想看的日志内容会有不同,开发阶段的调试信息,运行阶段的出错信息,如果不加以区分都记录在一个介质中,每次都要查找半天,肯定痛苦死,所以每个Logger对象都有设置一个优先级,共7种,从低到高依次为:ALL、Debug、Info、Warn、Error、Fatal、OFF,可以看到,除了最低(ALL)和最高(OFF),其他五个刚好和上边五个方法对应,其实每个方法自身就对应着一个优先级,每次调用方法时程序都会判断自身是否不小于对象优先级,是则记录日志,否则放弃。

2.Appender对象

Appender负责指定日志存储介质,比如文本文件、数据库、系统日志等等,所有Appender对象都继承自log4net.Appender.AppenderSkeleton,log4net自带的存储介质有以下几种:

引用内容 引用内容
log4net.Appender.AdoNetAppender
log4net.Appender.AnsiColorTerminalAppender
log4net.Appender.AspNetTraceAppender
log4net.Appender.BufferingForwardingAppender
log4net.Appender.ColoredConsoleAppender
log4net.Appender.ConsoleAppender
log4net.Appender.EventLogAppender
log4net.Appender.FileAppender
log4net.Appender.ForwardingAppender
log4net.LocalSyslogAppender
log4net.Appender.MemoryAppender
log4net.Appender.NetSendAppender
log4net.Appender.OutputDebugStringAppender
log4net.Appender.RemoteSyslogAppender
log4net.Appender.RemotingAppender
log4net.Appender.RollingFileAppender
log4net.Appender.SmtpAppender
log4net.Appender.SmtpPickupDirAppender
log4net.Appender.TelnetAppender
log4net.Appender.TraceAppender
log4net.Appender.UdpAppender

每选择一种存储介质都需要设置与其对应的参数,比如使用文本文件存储日志,你需要说一下文件的磁盘位置,使用数据库,你要说明下数据库类型、连接方式等等。当然了,如果上边的介质不够用,通过继承log4net.Appender.AppenderSkeleton写自己的存储介质也是可以的。

3.Layout对象

Layout负责对日志内容进行格式化,所有Layout对象继承自log4net.Layout.LayoutSkeleton,log4net同样自带了几种格式化方式:

引用内容 引用内容
log4net.Layout.ExceptionLayout
log4net.Layout.PatternLayout
log4net.Layout.RawTimeStampLayout
log4net.Layout.RawUtcTimeStampLayout
log4net.Layout.SimpleLayout
log4net.Layout.XmlLayout
log4net.Layout.XmlLayoutSchemaLog4j

和Appender对象一样,每种格式化方式都有对应的参数,你一样可以通过继承log4net.Layout.LayoutSkeleton定义自己的格式化方式。

4.Filters对象

Filters负责对日志进行筛选,它们继承自log4net.Filter.FilterSkeleton,log4net自带的Filters对象有:

引用内容 引用内容
log4net.Filter.DenyAllFilter
log4net.Filter.LevelMatchFilter
log4net.Filter.LevelRangeFilter
log4net.Filter.LoggerMatchFilter
log4net.Filter.PropertyFilter
log4net.Filter.StringMatchFilter

二、log4net使用说明

从上一节我们知道log4net记录日志会使用到四个对象,那具体怎么使用呢?很简单,先在config文件中声明好,然后在程序中直接获取Logger对象记录即可。

1.config文件结构

引用内容 引用内容
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <root>
      <level value="" />
      <appender-ref ref="" />
    </root>
    <logger name="">
      <level value=""/>
      <appender-ref ref="" />
    </logger>
    <appender name="" type="">
      <param name="" value="" />
      <layout type="">
        <param name="" value=""/>
      </layout>
      <filter type="">
        <param name="" value=""/>
      </filter>
    </appender>
  </log4net>
</configuration>

所有logger节点都可继承root节点的内容;同一个config文件中允许有多个logger节点和appender节点;一个logger节点允许引用多个appender节点。

2.assembly配置

①.WEB站点

在Global.asax文件中加入以下内容:
void Application_Start(object sender, EventArgs e)
{
    log4net.Config.XmlConfigurator.Configure();
}

②.控制台应用程序、Windows窗体应用程序

在AssemblyInfo.cs文件中或是命名空间前面加入以下内容:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

3.创建Logger对象实例

//using log4net;
ILog logger1 = LogManager.GetLogger("LoggerName")

三、log4net使用实例(控制台应用程序)

1.app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <!-- Logger -->
    <root>
      <level value="ALL" />
      <appender-ref ref="LogFileAppender" />
    </root>
    <logger name="Logger1">
      <level value="DEBUG"/>
    </logger>
    <logger name="Logger2">
      <level value="WARN"/>
      <appender-ref ref="ConsoleAppender" />
      <appender-ref ref="EventLogAppender" />
    </logger>
    <!-- Appender -->
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <param name="File" value="Log\1.log" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}: %m,line:%L%n"/>
      </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}: %m,line:%L%n"/>
      </layout>
    </appender>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}: %m,line:%L%n"/>
      </layout>
    </appender>
  </log4net>
</configuration>

2.Program.cs

using System;
using log4net;

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace ConsoleApplication1
{
    class Program
    {
        private static readonly ILog logger1 = LogManager.GetLogger("Logger1");
        private static readonly ILog logger2 = LogManager.GetLogger("Logger2");

        static void Main(string[] args)
        {
            logger1.Debug("err1");
            logger1.Warn("err2");
            logger2.Debug("err3");
            logger2.Warn("err4");
            logger2.Fatal("err5");

            Console.ReadKey();
        }

    }
}



四、参考资料

@.log4net官方文档:http://logging.apache.org/log4net/release/manual/introduction.html
@.Log4Net使用指南:http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html
@.Log4Net五步走:http://hi.baidu.com/zzticzh/blog/item/6653a0648280aef5f63654f7.html
@.log4net使用详解:http://blog.csdn.net/zhoufoxcn/article/details/2220533
@.log4net用后总结:http://blog.163.com/sunxitao88/blog/static/683144392008428114510606/

上一篇: 气温对人体的影响
下一篇: 国内域名注册商查询
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 0 | 引用: 0 | 查看次数: 4930
发表评论
登录后再发表评论!