一 Log4Net日志管理
级别 允许的方法 Boolean属性 优先级别
OFF Highest
FATAL void Fatal(...); bool IsFatalEnabled;
ERROR void Error(...); bool IsErrorEnabled;
WARN void Warn(...); bool IsWarnEnabled;
INFO void Info(...); bool IsInfoEnabled;
DEBUG void Debug(...); bool IsDebugEnabled;
ALL Lowest
Log4Net的日志管理提供了多种输出介质如日志文件、数据库、控制台等,下面我们着重介绍以下几种常用的介质及其使用方法:
1、 输出介质为日志文件
a) 配置文件中的配置
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<root>
<!--这里设置了在系统中日志记录的级别,如果在系统中需要记录的级别小于 此处设置的级别则日志不作记录-->
<level value="ALL" />
<!--定义了日志输出的介质的类型,可定义多种输出介质-->
<appender-ref ref="LogFileAppender" />
</root>
<!--输出至指定的日志文件-->
<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
<!--该配置项参数指明了日志文件存放的地方-->
<param name="File" value="d:\log\Client.log" />
<!--该配置项参数指明是否在原文件中添加日志信息-->
<param name="AppendToFile" value="true" />
<!--该配置项参数指明输出信息的布局或格式-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
</log4net>
b) 应用程序中的调用
log4net.ILog log = log4net.LogManager.GetLogger("aaa");
//写Error级别的日志信息
log.Error("输出Error级别的日志信息")
//写Info级别的日志信息
log.Info("输出Info级别的日志信息");
2、 输出介质为数据库
a) 配置文件中的配置
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<root>
<!--这里设置了在系统中日志记录的级别,如果在系统中需要记录的级别小于 此处设置的级别则日志不作记录-->
<level value="ALL" />
<!--定义了日志输出的介质的类型,可定义多种输出介质-->
<appender-ref ref="AdoNetAppender" />
</root>
<!--输出至数据库(Sql Server)。。。测试数据库用Northwind-->
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<!--设置缓存中能存放的日志信息个数-->
<bufferSize value="2" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="server=(local);database=Northwind;integrated security=false;persist security info=True;UID=sa;PWD=" />
<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>
</log4net>
b) 应用程序中的调用
log4net.ILog log = log4net.LogManager.GetLogger("aaa");
//写Error级别的日志信息
log.Error("输出Error级别的日志信息")
//写Info级别的日志信息
log.Info("输出Info级别的日志信息");
3、 输出介质为控制台
a) 配置文件中的配置
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<root>
<!--这里设置了在系统中日志记录的级别,如果在系统中需要记录的级别小于 此处设置的级别则日志不作记录-->
<level value="ALL" />
<!--定义了日志输出的介质的类型,可定义多种输出介质-->
<appender-ref ref="ConsoleAppender" />
</root>
<!--输出至控制台-->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<!--该配置项参数指明输出信息的布局或格式-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
</log4net>
b) 应用程序中的调用
log4net.ILog log = log4net.LogManager.GetLogger("aaa");
//写Error级别的日志信息
log.Error("输出Error级别的日志信息")
//写Info级别的日志信息
log.Info("输出Info级别的日志信息");
4、 输出介质为本地机器的应用程序事件日志
a) 配置文件中的配置
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<root>
<!--这里设置了在系统中日志记录的级别,如果在系统中需要记录的级别小于 此处设置的级别则日志不作记录-->
<level value="ALL" />
<!--定义了日志输出的介质的类型,可定义多种输出介质-->
<appender-ref ref="EventLogAppender" />
</root>
<!--输出至Event Log服务-->
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<!--该配置项参数指明输出信息的布局或格式-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
</log4net>
b) 应用程序中的调用
log4net.ILog log = log4net.LogManager.GetLogger("aaa");
//写Error级别的日志信息
log.Error("输出Error级别的日志信息")
//写Info级别的日志信息
log.Info("输出Info级别的日志信息");
5、 其他
其他的输出介质这里就不再介绍了,如有需要可参照相关资料
在使用Log4Net的日志的时候有几点需要注意:
如果在配置文件中的<root>节点下的配置了多个输出介质即有多个
<appender-ref ref="***" />,那么你所配置的多个输出介质的都将记入相应日志信息
由于我们在应用系统的开发中,某些日志要求达到Error或其他级别时才被记录,介于这种要求,我们需要自己定义一个级别,如下(在配置文件的<root>下加入):
<!--定义个别日志写入的级别-->
<logger name="main">
<level value="Error"></level>
</logger>
调用:
//指定配置的Logger的名称
log4net.ILog log = log4net.LogManager.GetLogger("main");
//写Error级别的日志信息
log.Error("输出Error级别的日志信息")
//写Info级别的日志信息
log.Info("输出Info级别的日志信息");
二 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接口。
注意如有多种形式输出要多加root节点至少一种以上
例:
<root>
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="EventLogAppender" />
<appender-ref ref="AdoNetAppender_Access" />
</root>
配置文件可在应用站点的Global.asax 直接加载
void Application_Start(object sender, EventArgs e)
{
//在应用程序启动时运行的代码
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("log4netConfig.xml")));
}