基本介绍(略)
下载:
http://logging.apache.org/log4net/downloads.html
模式一览
编号 | 设计模式 | 作用 |
1 | 工厂方法 | 创建Logger和Plugin |
2 | 模板方法 | 在DoAppend中调用抽象的Append方法,这个方法在子类中实现 |
3 | 桥接 | 使不同的形式的日志和不同记录方式的日志任意组合 |
4 | 适配器 | 适配Layout和RawLayout |
5 | 职责链 | 事件过滤对象组成职责链 |
6 | 原型 | 实现PluginCollection和AppenderCollection的复制 |
7 | 迭代器 | 实现对PluginCollection和AppenderCollection元素的遍历访问 |
log4net架构UML图
Log4net 概貌
Log4net结构(一)——Logger
Log4net结构(二)——Repository,Appender,Layout
log4net结构(三)——配置文件
Log4Net Appender 之 ADONetAppender
基本配置
上面配置中的第3行配置了日志中的缓存的收集的事件的最大数目。这里设置了100,日志缓存中的数目达到100时,Log就会将缓存的日志写入数据库,并清空缓存。当log4net关闭时,log4net会自动把日志写入数据库,尽管没有达到100。
如果不配置BufferSize,那么默认值是512.
数据库连接配置
上面配置中的第4到第6行显示了数据库连接的配置。
ConnectionType设置了使用什么类型的数据库连接,例子中使用的是SqlConnection,这里,ConnectionType需要的是继承自IDbConnection接口的类所在的Assembly的FullName。
ConnectionString则是对应的数据连接的连接字符串。
CommandText是SQL命令字符串,这里使用的是SQL语句,当然,也可以使用存储过程,如果使用存储过程,那么需要增加一项配置如下
<Param name="CommandType" value="StoredProcedure"/>
(例子下载)
log4net 1.2.9 的配置及使用
Using log4net
查看程序集的FullName
using System.Threading;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;
using System.Configuration.Assemblies;
private void Button2_Click(object sender, System.EventArgs e)
{
try
{
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.CodeBase = Server.MapPath("System.Data.dll");
Assembly[] myAssemblies = Thread.GetDomain().GetAssemblies();
// Get the dynamic assembly named 'MyAssembly'.
Assembly myAssembly = null;
for(int i = 0; i < myAssemblies.Length; i++)
{
if(String.Compare(myAssemblies[i].GetName().Name, "System.Data") == 0)
myAssembly = myAssemblies[i];
}
if(myAssembly != null)
{
Response.Write("<hr>");
Response.Write(myAssembly.GetName().FullName);
Response.Write("<hr>");
}
}
catch(Exception ex)
{
//Loggerlog4net l4 = new Loggerlog4net();
//l4.LogException("GetPublicKey",ex);
}
}
using System.IO;
using System.Reflection;
using System.Reflection.Emit;
using System.Configuration.Assemblies;
private void Button2_Click(object sender, System.EventArgs e)
{
try
{
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.CodeBase = Server.MapPath("System.Data.dll");
Assembly[] myAssemblies = Thread.GetDomain().GetAssemblies();
// Get the dynamic assembly named 'MyAssembly'.
Assembly myAssembly = null;
for(int i = 0; i < myAssemblies.Length; i++)
{
if(String.Compare(myAssemblies[i].GetName().Name, "System.Data") == 0)
myAssembly = myAssemblies[i];
}
if(myAssembly != null)
{
Response.Write("<hr>");
Response.Write(myAssembly.GetName().FullName);
Response.Write("<hr>");
}
}
catch(Exception ex)
{
//Loggerlog4net l4 = new Loggerlog4net();
//l4.LogException("GetPublicKey",ex);
}
}