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. JavaScript模块化-require.js

    http://www.cnblogs.com/duanhuajian/archive/2013/01/04/2844151.html 原文:http://www.ruanyifeng.com/blog ...

  2. AngularJS 不得不了解的服务 $compile 用于动态显示html内容

    项目中一度纠结与AngularJS如何动态显示不同的html内容. 本来是希望直接使用下面的语句来实现: <div> </div> 但是很尴尬的是,这样不能识别出html标签, ...

  3. Android Studio rename module Can't rename root module

    Android Studio修改工程根目录的时候会报错, rename module Can't rename root module. 主要是该工程已经打开,再命名必须要关闭改工程,就跟正在写一个t ...

  4. DIV周边添加投影及背景固定

    DIV周边添加投影.tou{ width:1000px; height:300px; border:0px solid #999; background:#FFF; margin:0 auto; ma ...

  5. android Xml生成一条细线,以及获取屏幕宽度和高度

    <View android:layout_width="match_parent" android:layout_height="2dip" androi ...

  6. java 编码 UTF-8、ISO-8859-1、GBK 【转】

    Java支持UTF-8.ISO-8859-1.GBK等各种字体编码,可笔者发现Java中字体编码的问题仍难倒了不少程序员,网上虽然也有不少关于在Java中如何正确显示中文的文章,但都不够全面,笔者特意 ...

  7. QListWidget与QTableWidget的使用以及样式设置

    QListWidget和QTableWidget的使用和属性,QTableWidget和QListWidget样式表的设置,滚动条的样式设置 一.QListWidget的使用 //一.QListWid ...

  8. Dependency Walker使用说明

    Dependency Walker使用说明 标签: dllexewindowsvbqq工具 2010-03-29 11:10 25175人阅读 评论(22) 收藏 举报  分类: 基本常识(45)  ...

  9. LoadRunner 技巧之THML 与 URL两种录制模式分析

    Loadrunner的Virtual User Generator 提供人脚本的录制功能,对于初学者来说,这大大的降低了编写脚本的门槛,loadrunner提供两种录制脚本的方式:Html_based ...

  10. C语言的本质(28)——C语言与汇编之用汇编写一个Helloword

    为了更加深入理解C语言的本质,我们需要学习一些汇编相关的知识.作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但是非常重要.因为它能够完成许多其它语言所无法完成的功能.就拿 Linux 内核 ...