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. Oracle sql语言模糊查询--like后面的通配符

    关于like后面的条件,Oracle提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FR ...

  2. 自动化单元测试工具 EvoSuite 的简单使用

    一.EvoSuite简介 EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行. 通过使用此自动测 ...

  3. (ssh整合web导出excel)在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载

    (一) 接需求  :   需求相关   (贴图 ) 生成三核对文件 1.新增三核对菜单页面中,增加生成三核对文件功能按钮,弹窗可根据变电站.电压等级查询定值单. 2.定值单信息以表格形式展示,根据选择 ...

  4. E - Number Sequence(第二季水)

    Description A single positive integer i is given. Write a program to find the digit located in the p ...

  5. AngularJS 深入理解 $scope 转载▼

    AngularJS 深入理解 $scope 转载▼ (2015-04-07 14:09:50)     $scope 的使用贯穿整个 AngularJS App 应用,它与数据模型相关联,同时也是表达 ...

  6. php 代码重用

    <?php /* 21.php * 代码重用 * include() required()载入文件 * include() 如果载入文件不存在,提示警告,还可以继续执行 * required() ...

  7. php 格式化金额

    /** * 格式化金额 * * @param int $money * @param int $len * @param string $sign * @return string */ functi ...

  8. TypeError: 'QueryDict' object is not callable

    id = int(request.POST('id')) Error message: TypeError: 'QueryDict' object is not callable Error rese ...

  9. SQL Server 造成cpu 使用率高的 6 原因

    第一种: 编译和重编译执行计划. 第二种: 排序与聚合. 第三种: 表格连接操作. 第四种: max degree of parallelism. 第五种: max worker threads. 第 ...

  10. nginx 日志格式

    log_format main '$http_host $server_addr $remote_addr [$time_local] "$request" ' '$request ...