log4net 使用广泛,WinForm WebForm都可使用。
本文主要讲解 WebForm中 配置 log4net.(时间有限,不完整之处,后继补充)
log4net的使用,在下一篇讲解。
具体看个配置文件,然后讲解。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net debug="true">
<!--Log存储目标 appender txtFile-->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<File value="d:\test.log" />
<AppendToFile value="true" />
<RollingStyle value="Size" />
<MaxSizeRollBackups value="10" />
<MaximumFileSize value="200000KB" />
<StaticLogFileName value="true" />
<!--结构布局-->
<layout type="log4net.Layout.PatternLayout">
<Header value="Begin ...." />
<Footer value="End ...." />
<ConversionPattern value="%n %-5p %d %5rms %n - %-22.22c{1} %-18.18M %n - %m %n - " />
</layout>
</appender>
<!--Log存储目标 appender DB-->
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<!--存入DB前,缓存的记录数量.1代表立即存入DB-->
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=.;initial catalog=TestDB;integrated security=false;persist security info=True;User ID=sa;Password=wayne" />
<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>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
<parameterName value="@log_level" />
<size value="50" />
<conversionPattern value="%level" />
<parameterName value="@logger" />
<conversionPattern value="%logger" />
<parameterName value="@message" />
<size value="4000" />
<conversionPattern value="%message" />
<parameterName value="@exception" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
<!--设定优先级、选择Log目标-->
<root>
<priority value="ALL" />
<appender-ref ref="AdoNetAppender" />
<!--
<appender-ref ref="RollingLogFileAppender" />
-->
</root>
</log4net>
</configuration>
<!--创建Log Table-->
<!--
CREATE TABLE [dbo].[Log] (
[Id] [int] IDENTITY (1, 1) NOT NULL PRIMARY KEY CLUSTERED,
[Date] [datetime] NOT NULL,
[Thread] [varchar] (255) NOT NULL,
[Level] [varchar] (50) NOT NULL,
[Logger] [varchar] (255) NOT NULL,
[Message] [varchar] (4000) NOT NULL,
[Exception] [varchar] (2000) NULL
)
-->
<!--配置Log4net-->
WebForm 中配置 Log4net (以 log4net V 1.2.10.0 为例)
首先把log4net.dll引入到你的项目References中。
使用log4net需要知道其中两个比较重要的概念:logger 和 appender。
logger是日志记录对象. appender是日志记录的目标,包括控制台,文件,定量大小的文件,远程广播。
使用log4net的过程可以是这样的:
1、在配置文件(*.config 或 *.xml)中配置appender,为logger对象指定日志的记录位置,
(1)可以定义多个appender,每一个appender就是一个日志记录的目标。
(2)只可以定义一个root节点,用于指定了选用哪一个 appender .
(3)log4net的配置文件可以是独立的*.config或xml文件,也可以将配置写在web.config中。推荐使用独立的配置文件。(便于复用,下面的说明也是使用独立xml文件)
2、在 Global.asax 、AssemblyInfo.cs中配置“配置文件的加载方式”。
3、在需要使用log4net的class中,生成一个用来记录日志的工具对象logger,
详细说明:
1、配置文件的详细说明参考网络上的文章。包括如何配置文件存储、DB存储。
2、使用独立配置文件(MyLog4Net.xml)时,加载配置文件的方式有2种
第1种:简单,只使用 Globla.asax
Globla.asax 中增加代码:
protected void Application_Start(object sender, EventArgs e)
{
// 初始化日志配置,方式1
//采用此方式,不需要在 AssemblyInfo.cs中配置 [assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = "MyLog4Net.xml", Watch = true)]
System.IO.FileInfo configPath = new System.IO.FileInfo(Server.MapPath("~/Mylog4Net.xml"));
log4net.Config.XmlConfigurator.Configure(configPath);
}
第2种:稍复杂,同时使用 Globla.asax 和 AssemblyInfo.cs
AssemblyInfo.cs 中增加代码:
[assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = "MyLog4Net.xml", Watch = true)] //程序集属性,指明了配置文件路径.
////初始化日志配置,方式2
////采用此方式,需要在 AssemblyInfo.cs中配置 [assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = "MyLog4Net.xml", Watch = true)]
log4net.Config.XmlConfigurator.Configure();
这2种加载配置文件的方式,都指明了配置文件的路径。 一个在程序集属性那里指定,一个在Application_Start中指定。
(需要注意的是,低版本的log4net可能使用 log4net.Config.DOMConfigurator.Configure(); 加载配置文件)
3、在需要使用log4net的class中添加代码
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);//使用反射,获得当前的Class
好了,到此为止整个配置过程完成了
-->
<File value="d:\test.log" /> 与 <param name="File" value="d:\test.log"> 等效 ,均可以。
<priority value="ALL" /> 与 <param name="priority" value="ALL" /> 不等效,后者写法不对。
所以,不建议使用 param 写法。
另外,首字符大小写均可以。File 与 file 均可以。
-->
<conversionPattern value="%n %-5p %d %5rms %n - %-22.22c{1} %-18.18M %n - %m %n - " />
des:
%n 换行符
%-5p 日志类型 eg Error Warning ...
%-22.22c{1} 类名 _Default
%-18.18M 方法名 bt1_Click
%d 时间精确到毫秒 eg: 2011-03-17 11:26:05,275
%5rms 毫秒 eg; 2618ms