Log4net简介及在项目中的简单应用

Log4net 是一个开源的类库,可以通过它将.NET 应用程序的日志记录到多种介质中(控制台、SMTP或者文本文件等)。Log4net 起源自Java应用中的log4J.

日志的记录通过一个或多个logger来实现。logger为日志信息提供了五种不同级别(由低至高):

1.Debug

2.Information

3.Warnings

4.Error 

5.Fatal

每一个logger可以记录指定级别的日志信息,因此,5种不同级别的信息处理可有效帮助开发,而当项目发布后,你可以选择只记录Fatal级别的日志,这一切的配置都非常简单。

如何指定日志信息保存的地址呢?Appender用于指定保存日志信息保存的路径。利用Appender可以将日志信息保存至数据库、email等。你可以通过配置使用多个Appender,用于向多个介质中存储日志信息并可控制记录不同级别的日志信息。Appender的配置在一个外置的XML文件中,配置它是一件极其简单的事。

OK,我们知道通过Logger将日志信息保存到Appender指定的路径,而怎么指定日志信息保存的格式呢?Log4net通过配置每一个Appender的layouts来指定记录日志信息的格式。这些layouts指定日志信息是保有存为简单的文本还是XML文件,或是不是记录日志信息生成的时间等。

下面用代码说明如何使用Log4net


C# code
using log4net;
using log4net.Config;

class LogTest
{
    
private static readonly ILog logger = LogManager.GetLogger(typeof(LogTest));

    
static LogTest()
    {
        XmlConfigurator.Configure();
    }
    
static void Main(string[] args)
    {
        logger.Debug(
"Here is a debug log.");
        logger.Info(
".... and an Info log.");
        logger.Warn(
".... and a warning.");
        logger.Error(
".... and an error.");
        logger.Fatal(
"... and a fatal error.");
    }
}

Web config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
  
<configSections>
    
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  
</configSections>
  
  
<log4net>
    
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      
<param name="File" value="LogTest.text"/>
      
<param name="AppendToFile" value="true"/>
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
      
</layout>
    
</appender>
    
    
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="Header" value="[Header]\r\n"/>
        
<param name="Footer" value="[Footer]\r\n"/>
        
<param name="ConversionPattern" value="%d %-5p -- Line:%L %F  %c %m%n"/>
      
</layout>
    
</appender>
    
    
<root>
      
<level value="Info"/>      <!--value可以指定Debug/Info/Warn/Error/Fatal中的任意一种-->
      
<appender-ref ref="LogFileAppender"/>
      
<appender-ref ref="ConsoleAppender"/>
    
</root>
  
  
</log4net>
</configuration>

控制台输出:

console

文本输出:

txt

layout 的参数ConversionPattern的值的含义:

%d(date time):当前语句执行的时间

%p(priority):日志当前级别(Debug,Info,eg)

%L(line):输出语句所在的行号

%F(file):输出语句所在的文件名

%c(class):当前日志对象的名称

%m(message):当前记录的日志信息

%n(new line):换行

%t(thread id):当前语句所在的线程ID

%r(run time):输出程序从运行至执行当前语句消耗的毫秒数

%-数字:表示该项的最小长度,不够用空格填充(如%-5p)

注意:%后的字母区分大小写

根据应用程序需要可创建多个logger记录不同信息,如一个logger专门记录bug信息,而另一个logger专门记录网站流量信息,关于如何创建多个logger,

具体可参考:http://www.codeproject.com/KB/trace/log4net_intro2.aspx 

关于logger对象的叠加,root 与自定义的logger之间存在继承关系(root 为父对象,自定义的logger为子对象),如果新建一个logger不与root 存在继承关系,可通过设置属性 additivity="false" 来完成。

具体可参考:http://raderustc.blog.ccidnet.com/blog-htm-do-showone-type-blog-itemid-144436-uid-1406.html

  

本文部分翻译自:http://www.codeproject.com/KB/trace/log4net_intro.aspx

posted @ 2009-10-15 22:11  guzufeng  阅读(345)  评论(0编辑  收藏  举报