一
		
				
				
				Log4net
		
		简介
		
				
				
				
		
		
				Log4net
				是基于
				.net
				开发的一款非常著名的记录日志开源组件。他最早是
				2001
				年
				7
				月由
				NeoWorks Limited
				启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-
				log4j
				。
				Log4net
				记录日志的功能非常强大。它可以将日志分不同的等级,比不同的样式,将日志输出到不同的媒介。
				
						
						
				
		
		
				Log4net
				可以从
				
						
								http://logging.apache.org/log4net/downloads.html
						
				
				网站下载最新版本。
				
						
						
				
		
		
				
						 
				
		
		
				
						
二
				
				
				Log4net
				核心组成
				
						
						
				
		
		
				Log4net
				主要由五个部分组成,分别为
				Logger
				,
				Appenders, 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.net中Trace的方式查看记录的日志。
		
		
				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
		
		
				
						
下面有个基于控制台的
				demo
				,举例描述了
				log4net
				怎么用于输出日志。
本例中,日志将会记录到文件,控制台,事件日至和Access数据库中。
一)主要代码:
1. 配置文件app.config
		
		
				 1
				
				<?
				xml version="1.0" encoding="utf-8" 
				?>
				
						
				
				 2
				
						
				
				<
				configuration
				>
				
						
				
				 3
				
						
    
				<!--
				 Register a section handler for the log4net section 
				-->
				
						
				
				 4
				
						
    
				<
				configSections
				>
				
						
				
				 5
				
						
        
				<
				section 
				name
				="log4net"
				 type
				="System.Configuration.IgnoreSectionHandler"
				 
				/>
				
						
				
				 6
				
						
    
				</
				configSections
				>
				
						
				
				 7
				
						
    
				<
				appSettings
				>
				
						
				
				 8
				
						
        
				<!--
				 To enable internal log4net logging specify the following appSettings key 
				-->
				
						
				
				 9
				
						
        
				<!--
				 <add key="log4net.Internal.Debug" value="true"/> 
				-->
				</
				appSettings
				>
				
						
				
				10
				
						
    
				<!--
				 This section contains the log4net configuration settings 
				-->
				
						
				
				11
				
						
    
				<
				log4net
				>
				
						
				
				12
				
						
        
				<!--
				定义输出到文件中
				-->
				
						
				
				13
				
						
        
				<
				appender 
				name
				="LogFileAppender"
				 type
				="log4net.Appender.FileAppender"
				>
				
						
				
				14
				
						
            
				<!--
				定义文件存放位置
				-->
				
						
				
				15
				
						
            
				<
				file 
				value
				="D:\log-file1.txt"
				 
				/>
				
						
				
				16
				
						
            
				<!--
				 Example using environment variables in params 
				-->
				
						
				
				17
				
						
            
				<!--
				 <file value="${TMP}\log-file.txt" /> 
				-->
				
						
				
				18
				
						
            
				<!--
				<sppendToFile value="true" />
				-->
				
						
				
				19
				
						
            
				<!--
				 An alternate output encoding can be specified 
				-->
				
						
				
				20
				
						
            
				<!--
				 <encoding value="unicodeFFFE" /> 
				-->
				
						
				
				21
				
						
            
				<
				layout 
				type
				="log4net.Layout.PatternLayout"
				>
				
						
				
				22
				
						
                
				<!--
				每条日志末尾的文字说明
				-->
				
						
				
				23
				
						
                
				<
				footer 
				value
				="[Footer]--Test By Ring1981  "
				 
				/>
				
						
				
				24
				
						
                
				<!--
				输出格式
				-->
				
						
				
				25
				
						
                
				<
				conversionPattern 
				value
				="%date [%thread] %-5level %logger [%ndc] <%property{auth}> - %message%newline"
				 
				/>
				
						
				
				26
				
						
            
				</
				layout
				>
				            
				27
				
						
        
				</
				appender
				>
				
						
				
				28
				
						
        
				<!--
				定义输出到控制台命令行中
				-->
				
						
				
				29
				
						
        
				<
				appender 
				name
				="ConsoleAppender"
				 type
				="log4net.Appender.ConsoleAppender"
				>
				            
				30
				
						
            
				<
				layout 
				type
				="log4net.Layout.PatternLayout"
				>
				
						
				
				31
				
						
                
				<
				conversionPattern 
				value
				="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"
				 
				/>
				
						
				
				32
				
						
            
				</
				layout
				>
				
						
				
				33
				
						
        
				</
				appender
				>
				
						
				
				34
				
						
        
				<!--
				定义输出到windows事件中
				-->
				
						
				
				35
				
						
        
				<
				appender 
				name
				="EventLogAppender"
				 type
				="log4net.Appender.EventLogAppender"
				>
				
						
				
				36
				
						
            
				<
				layout 
				type
				="log4net.Layout.PatternLayout"
				>
				
						
				
				37
				
						
                
				<
				conversionPattern 
				value
				="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"
				 
				/>
				
						
				
				38
				
						
            
				</
				layout
				>
				
						
				
				39
				
						
        
				</
				appender
				>
				
						
				
				40
				
						
        
				<!--
				定义输出到数据库中,这里举例输出到Access数据库中,数据库为D盘的access.mdb
				-->
				
						
				
				41
				
						
        
				<
				appender 
				name
				="AdoNetAppender_Access"
				 type
				="log4net.Appender.AdoNetAppender"
				>
				
						
				
				42
				
						
            
				<
				connectionString 
				value
				="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\access.mdb"
				 
				/>
				
						
				
				43
				
						
            
				<
				commandText 
				value
				="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)"
				 
				/>
				
						
				
				44
				
						
            
				<!--
				定义各个参数
				-->
				
						
				
				45
				
						
            
				<
				parameter
				>
				
						
				
				46
				
						
                
				<
				parameterName 
				value
				="@log_date"
				 
				/>
				
						
				
				47
				
						
                
				<
				dbType 
				value
				="String"
				 
				/>
				
						
				
				48
				
						
                
				<
				size 
				value
				="255"
				 
				/>
				
						
				
				49
				
						
                
				<
				layout 
				type
				="log4net.Layout.PatternLayout"
				>
				
						
				
				50
				
						
                    
				<
				conversionPattern 
				value
				="%date"
				 
				/>
				
						
				
				51
				
						
                
				</
				layout
				>
				
						
				
				52
				
						
            
				</
				parameter
				>
				
						
				
				53
				
						
            
				<
				parameter
				>
				
						
				
				54
				
						
                
				<
				parameterName 
				value
				="@thread"
				 
				/>
				
						
				
				55
				
						
                
				<
				dbType 
				value
				="String"
				 
				/>
				
						
				
				56
				
						
                
				<
				size 
				value
				="255"
				 
				/>
				
						
				
				57
				
						
                
				<
				layout 
				type
				="log4net.Layout.PatternLayout"
				>
				
						
				
				58
				
						
                    
				<
				conversionPattern 
				value
				="%thread"
				 
				/>
				
						
				
				59
				
						
                
				</
				layout
				>
				
						
				
				60
				
						
            
				</
				parameter
				>
				
						
				
				61
				
						
            
				<
				parameter
				>
				
						
				
				62
				
						
                
				<
				parameterName 
				value
				="@log_level"
				 
				/>
				
						
				
				63
				
						
                
				<
				dbType 
				value
				="String"
				 
				/>
				
						
				
				64
				
						
                
				<
				size 
				value
				="50"
				 
				/>
				
						
				
				65
				
						
                
				<
				layout 
				type
				="log4net.Layout.PatternLayout"
				>
				
						
				
				66
				
						
                    
				<
				conversionPattern 
				value
				="%level"
				 
				/>
				
						
				
				67
				
						
                
				</
				layout
				>
				
						
				
				68
				
						
            
				</
				parameter
				>
				
						
				
				69
				
						
            
				<
				parameter
				>
				
						
				
				70
				
						
                
				<
				parameterName 
				value
				="@logger"
				 
				/>
				
						
				
				71
				
						
                
				<
				dbType 
				value
				="String"
				 
				/>
				
						
				
				72
				
						
                
				<
				size 
				value
				="255"
				 
				/>
				
						
				
				73
				
						
                
				<
				layout 
				type
				="log4net.Layout.PatternLayout"
				>
				
						
				
				74
				
						
                    
				<
				conversionPattern 
				value
				="%logger"
				 
				/>
				
						
				
				75
				
						
                
				</
				layout
				>
				
						
				
				76
				
						
            
				</
				parameter
				>
				
						
				
				77
				
						
            
				<
				parameter
				>
				
						
				
				78
				
						
                
				<
				parameterName 
				value
				="@message"
				 
				/>
				
						
				
				79
				
						
                
				<
				dbType 
				value
				="String"
				 
				/>
				
						
				
				80
				
						
                
				<
				size 
				value
				="1024"
				 
				/>
				
						
				
				81
				
						
                
				<
				layout 
				type
				="log4net.Layout.PatternLayout"
				>
				
						
				
				82
				
						
                    
				<
				conversionPattern 
				value
				="%message"
				 
				/>
				
						
				
				83
				
						
                
				</
				layout
				>
				
						
				
				84
				
						
            
				</
				parameter
				>
				
						
				
				85
				
						
        
				</
				appender
				>
				
						
				
				86
				
						
        
				<!--
				定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。
				-->
				
						
				
				87
				
						
        
				<
				root
				>
				
						
				
				88
				
						
            
				<
				appender-ref 
				ref
				="LogFileAppender"
				 
				/>
				
						
				
				89
				
						
            
				<
				appender-ref 
				ref
				="ConsoleAppender"
				 
				/>
				
						
				
				90
				
						
            
				<
				appender-ref 
				ref
				="EventLogAppender"
				 
				/>
				
						
				
				91
				
						
            
				<
				appender-ref 
				ref
				="AdoNetAppender_Access"
				 
				/>
				
						
				
				92
				
						
        
				</
				root
				>
				
						
				
				93
				
						
    
				</
				log4net
				>
				
						
				
				94
				
						
				
				</
				configuration
				>
		 
		2. LoggingExample.cs
 1
// Configure log4net using the .config file
 2
[assembly: log4net.Config.XmlConfigurator(Watch=true)]
 3
// This will cause log4net to look for a configuration file
 4
// called ConsoleApp.exe.config in the application base
 5
// directory (i.e. the directory containing ConsoleApp.exe)
 6
 7
namespace ConsoleApp
 8

{
 9
    using System;
10
11
    /**//// <summary>
12
    /// Example of how to simply configure and use log4net
13
    /// </summary>
14
    public class LoggingExample
15
    
{
16
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
17
        
18
        public static void Main(string[] args)
19
        
{
20
            log.Error("Error Acc");
21
            log.Fatal("Fatle Acc");            
22
            System.Console.ReadLine();
23
            
24
        }
25
26
    }
27
}