log4net文件保存配置我就不说太多了,网上一大把的,数据库配置其实网上也有,只是我第一次按照网上的配置没有跑通,我就说下数据库配置需要注意的地方吧。

下面是一个log4net的数据库代码配置

 public static void LoadADONetAppender()
{ log4net.Appender.AdoNetAppender adoAppender = new log4net.Appender.AdoNetAppender();
adoAppender.Name = "AdoNetAppender";
adoAppender.CommandType = CommandType.Text;
int tempbuffsize = ;
int.TryParse(BufferSize, out tempbuffsize);
adoAppender.BufferSize = tempbuffsize;
adoAppender.ConnectionType = "System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
adoAppender.ConnectionString = _ConnectionString;
adoAppender.CommandText = @"INSERT INTO [db_owner].[Log_Operation] (OpDate,OpType, UserIP, PageUrl, OpDesc,RecordID,UserName,UserID) " +
"VALUES (@Date, @OpType, @UserIP, @PageUrl, @OpDesc,@RecordID,@UserName,@UserID)";
adoAppender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@Date",
DbType = System.Data.DbType.DateTime,
Layout = new log4net.Layout.RawTimeStampLayout()
});
adoAppender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@OpType",
DbType = System.Data.DbType.String,
Size = ,
Layout = new Layout2RawLayoutAdapter(new PatternLayout("%logger"))
});
adoAppender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@UserIP",
DbType = System.Data.DbType.String,
Size = ,
Layout = new Layout2RawLayoutAdapter(new PatternLayout("%property{UserIP}"))
});
adoAppender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@PageUrl",
DbType = System.Data.DbType.String,
Size = ,
Layout = new Layout2RawLayoutAdapter(new PatternLayout("%property{PageUrl}"))
});
adoAppender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@OpDesc",
DbType = System.Data.DbType.String,
Size = ,
Layout = new Layout2RawLayoutAdapter(new PatternLayout("%message"))
});
adoAppender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@RecordID",
DbType = System.Data.DbType.Int32,
Layout = new Layout2RawLayoutAdapter(new PatternLayout("%property{RecordID}"))
});
adoAppender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@UserName",
DbType = System.Data.DbType.String,
Size = ,
Layout = new Layout2RawLayoutAdapter(new PatternLayout("%property{UserName}"))
});
adoAppender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@UserID",
DbType = System.Data.DbType.String,
Size = ,
Layout = new Layout2RawLayoutAdapter(new PatternLayout("%property{UserID}"))
});
adoAppender.ActivateOptions();
BasicConfigurator.Configure(adoAppender);
}

其中private static readonly string _ConnectionString = Common.Config.ConntionString,就是读取webconfig配置里的数据库字符串,Common.Config.ConntionString是我自己写的的一个帮助类的一个属性,这里就不多说了,基本就是下面这样子:

<add key="SQLConnString" value="server=T-MOSSDB02\SQL2008_TEST;user id=xxx;password=xxx;database=xxxx;"/>


这里需要注意的地方就是Size一定要设值,且要和数据库对应字段的大小要一致,要不就报一错,具体名字不记得了。

还有就是我这里的那个RecordID为整型,如在对象里RecordID设成int?属性,那保存时一要要保证RecordID有值这样才能保存成功。我目前项目就碰到过这问题,由于我这项目不是我设计,开始也没有把log4net整入框架,所以每次保存时RecordID如为空,我都会附个默认值。

下面说下log4net扩展

一般情况下log4net所提供的信息不能满足项目记录需求,但将log4net简单扩展下就能完美解决这些问题了,如web项目,一般都会要记录请求的url地址和用户IP,用户名等一些信息。

1.首先建个自定义接口类(IWebLog),继承ILog

2.然后再建一个自定接口实现类(WebLogImpl)来实现我们的IWebLog接口,

3.然后再写一个操作帮助类供我们使用时更方便调用我们写的自定义接口实现类WebLogImpl

具体代码我就不贴了,我也是从网找的,网上资料很多,发现了一篇写得很详细:

http://www.cnblogs.com/longshizhong/archive/2009/11/25/1610452.html

最后,这篇文章就到这里了。

log4net自定义扩展及配置说明的更多相关文章

  1. Heritrix3.x自定义扩展Extractor

    一.引言: Heritrix3.x与Heritrix1.x版本差异比较大,全新配置模式的引入+扩展接口的变化,同时由于说明文档的匮乏,给Heritrix的开发者带来困惑,前面的文章已经就Heritri ...

  2. SharePoint 2013 自定义扩展菜单

    在对SharePoint进行开发或者功能扩展的时候,经常需要对一些默认的菜单进行扩展,以使我们开发的东西更适合SharePoint本身的样式.SharePoint的各种功能菜单,像网站设置.Ribbo ...

  3. SharePoint 2013 自定义扩展菜单(二)

    接博文<SharePoint 2013 自定义扩展菜单>,多加了几个例子,方便大家理解. 例七 列表设置菜单扩展(listedit.aspx) 扩展效果 XML描述 <CustomA ...

  4. WCF自定义扩展,以实现aop!

    引用地址:https://msdn.microsoft.com/zh-cn/magazine/cc163302.aspx  使用自定义行为扩展 WCF Aaron Skonnard 代码下载位置: S ...

  5. Jquery自定义扩展方法(二)--HTML日历控件

    一.概述 研究了上节的Jquery自定义扩展方法,自己一直想做用jquery写一个小的插件,工作中也用到了用JQuery的日历插件,自己琢磨着去造个轮子--HTML5手机网页日历控件,废话不多说,先看 ...

  6. Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

  7. jQuery 自定义扩展,与$冲突处理

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. SparkContext自定义扩展textFiles,支持从多个目录中输入文本文件

    需求   SparkContext自定义扩展textFiles,支持从多个目录中输入文本文件   扩展   class SparkContext(pyspark.SparkContext): def ...

  9. Log4net 自定义字段到数据库

    今天要求做个log4net自定义字段到数据库,在网上找了好多例子,都运行不成功.最后找了个国外的,很简单的就解决了. log4net它已经定义的字段有 <commandText value=&q ...

随机推荐

  1. cisco asa5520 IOS故障恢复

    在ASA5520上误删除了IOS 把一台电脑IP 设置成192.168.2.2 255.255.255.0 把IOS的BIN文件复制到这台电脑上,并安装一个CISCO TFTP SERVER V1.1 ...

  2. Hibernate学习——映射关系

    学习记录 O(∩_∩)O . 如果你恰巧路过,希望你能停下脚步瞧一瞧,不足之处望指出,感激不尽~ 使用工具: 1.eclipse   2.hibernate压缩包(hibernate_4.3.11)  ...

  3. Ubuntu第一次使用调教教程

    Ubuntu第一次使用调教教程 Ubuntu不允许root用户登录,这让人很蛋疼.下面的方法就是让Ubuntu接受以root身份登录.此外,ubuntu默认没有安装ssh的,所以不能进行ssh远程登录 ...

  4. List小练习

    功能:创建链表节点,删除节点,顺序打印,不改变原结构的情况下分别用STL中的stack实现逆序打印和利用函数递归打印 代码如下: //链表问题struct ListNode {    int m_nV ...

  5. Dubbo使用详解及环境搭建

    一:Dubbo简介 Dubbo是阿里巴巴提供的开源的SOA(面向服务的体系结构)服务化治理的技术框架,据说只是一部分开源的,但一些基本的需求已经可以满足的,而且可扩展性.是一种能取代PHRPC的服务调 ...

  6. go import

    import "fmt"最常用的一种形式 import "./test"导入同一目录下test包中的内容 import f "fmt"导入f ...

  7. MySQL忘记了密码登录不进去,用命令符修改新的密码重新登录的方法

    MySQL忘记了密码登录不进去,用命令符修改新的密码重新登录的方法: 1.备份my.ini 2.在my.ini字段里 [mysqld] #socket=mysql skip-grant-tables ...

  8. 使用jsonp实现ajax跨域请求

    Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料. 由于同源策略,一般来说位于 server1.example.com 的网页无法 ...

  9. Python之路第八天,基础(9)-面向对象(下)

    类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的 ...

  10. python成长之路第二篇(4)_collections系列

    一.分别取出大于66的数字和小于66的数字 小练习:需求要求有一个列表列表中存着一组数字,要求将大于66的数字和小于66的数字分别取出来 aa = [11,22,33,44,55,66,77,88,9 ...