在项目中遇到需要记录操作日志的需求,由于是一个外挂系统,因此不用考虑到公司框架的限制,直接二层架构直连数据库,考虑使用log4net连接DB2。请宽恕我这个非软工科班出身的IT小白,以前一直在知道有个log4net,但在工作中公司有一套自己的框架记履历,一直没有机会接触。这次嘛,正好就这个机会小试身手。

在这里先简答介绍一下这个外挂系统。很简单,.NET+DB2的配置,两层架构,大致画面都有了,需要切入权限控制和日志系统。工作很顺利的开展了,权限系统嘛小意思,日志方面log4net拿来就用,大不了百度一下嘛。参考百度出来MySql的ODBC配置这里抄抄那里抄抄,这可到好,一运行,傻眼了,不报错,也没写入自己建的表,头疼。

本着一向的钻研精神,接着直接百度了log4net+DB2+ODBC等等各种关键词的排列组合,无奈,百度上log4net+DB2+ODBC的关键词几乎没有,都是sqlserver、Oracle云云的,崩溃,大家都不用log4net连DB2吗?唯一找到的一篇相关的博文,博主也只是说DB2 V9.7对log4net via ODBC的支持不好,根本连不上:(,好吧~~~~“根本连不上!!!”(后面我的结果证明他是错的哦)。接着小白求助了CSDN的论坛——没回音;想上stackoverflow问问老外,好久不上,google的JS库被墙了,问不出问题——无语。

就这样小白怀着不爽的心情熬到了今晚。就在小白一边咒骂log4net怎么连不上数据库连个报错都没有,一边断点调试的时候,发现了ConfigurationMessages的一坨履历,上面赫然写着,"找不到System.Data.dll"(大致是这个意思,小白就不在此贴图了)。灵光一闪,有眉目了,将引用中System.Data.dll复制本地设置成true,运行之,成了!

在此,小白将log4net通过ODBC于OLEDB连接DB2的配置列在下面:

log4net via ODBC

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net debug="true">
<root>
<level value="INFO"></level>
<!--文件记录格式-->
<!--<appender-ref ref="rollingFile"/>-->
<appender-ref ref="AdoNetAppender_DB2"/>
</root> <appender name="AdoNetAppender_DB2" type="log4net.Appender.AdoNetAppender,log4net">
<bufferSize value="1"/> <!--SQL数据源-->
<connectionType value="System.Data.Odbc.OdbcConnection, System.Data"/> <!--SQL连接字符串-->
<connectionString value="Driver={IBM DB2 ODBC DRIVER};Hostname=192.168.44.11;Port=50001;Database=xxx;Uid=xxx;Pwd=xxx;Protocol=TCPIP;" />
<commandText value="INSERT INTO xxx VALUES (' ', ' ', ' ', ?, ' ', ' ')"/> <parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout" value="%level" />
</parameter>
</appender>
</log4net>
</configuration>

log4net via OLEDB

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net debug="true">
<root>
<level value="INFO"></level>
<!--文件记录格式-->
<!--<appender-ref ref="rollingFile"/>-->
<appender-ref ref="AdoNetAppender_DB2"/>
</root>
<appender name="AdoNetAppender_DB2" type="log4net.Appender.AdoNetAppender,log4net">
<bufferSize value="1" />
<connectionType value="System.Data.OleDb.OleDbConnection, System.Data" />
<connectionString value="Provider=IBMDADB2;Hostname=192.168.44.11;Port=50001;UID=xxxx;PWD=xxx;Database=xxx;Protocol=TCPIP;" />
<commandText value="INSERT INTO xxx VALUES (' ', ' ', ' ', ?, ' ', ' ')" />
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
</appender>
</log4net>
</configuration>

最后,再贴一张如何检查log4net错误的断点视图,以后可以找到从哪查错咯:

log4net写入DB2备忘 via OLEDB & ODBC的更多相关文章

  1. Log4Net写入到数据库配置过程中的一些小问题备忘

    问题1: 在公司进行log4net写入服务器配置的时候,一切正常,但是在家里的机器上,就频繁出现这个问题: SQL Server 2008 报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误 ...

  2. 『备忘』HttpWebRequest 在 POST 提交时, 标头(Headers)丢失原因

    近来研究 HttpWebRequest —— 辅助类完成时,POST JSON数据 总会 丢失标头(Headers). HttpWebRequest POST JSON数据,分如下几步: > 将 ...

  3. Nmap备忘单:从探索到漏洞利用(Part 5)

    这是备忘单的最后一部分,在这里主要讲述漏洞评估和渗透测试. 数据库审计 列出数据库名称 nmap -sV --script=mysql-databases 192.168.195.130 上图并没有显 ...

  4. Linux常用命令速查备忘

    Linux常用命令速查备忘   PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown ...

  5. ## 本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘

    本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘一,磁盘管理1.显示当前目录位置 pwd2.切换目录 cd ...

  6. GIS部分理论知识备忘随笔

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带 ...

  7. python序列,字典备忘

    初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...

  8. Vi命令备忘

    备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...

  9. ExtJs4常用配置方法备忘

    viewport布局常用属性 new Ext.Viewport({ layout: "border", renderTo: Ext.getBody(), defaults: { b ...

随机推荐

  1. Python3之subprocess模块

    一.简介 subprocess最早在2.4版本引入.用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值. # subprocess用来替换多个旧模块和函数 os.syste ...

  2. docker 自定义镜像

    step1:自定义镜像 原镜像 registry.aspider.avlyun.org/library/php-apache docker run -d --name xz_apache regist ...

  3. 冒泡排序 思想 JAVA实现

    已知一个数组78.75.91.36.72.94.43.64.93.46,使用冒泡排序将此数组有序. 冒泡排序是一个运行时间为O(N²)的排序算法. 算法思想:(已从小到大为例) 78.75.91.36 ...

  4. 关于hive Metadata 使用 MsSQL

    下面的页面里说明, http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0-Win/bk_installing_hdp_for_window ...

  5. ASP.Net一般处理程序Session用法

    1.在aspx和aspx.cs中,都是以 Session["type"]="aaa" 和 string aaa=Session["type" ...

  6. adminlte+layui框架搭建1

    之前写过一篇layui-master的UI搭建,但是感觉layui-master缺少一些东西(前台页面不过多研究),比如说页面的皮肤.菜单.插件,当然我也希望layui的插件可以越来越多,支持多个浏览 ...

  7. JDK 5 ~ 10 新特性倾情整理!

    JDK 5 ~ 10 新特性倾情整理! 最近连 JDK11都在准备发布的路上了,大家都整明白了吗?也许现在大部分人还在用6-8,8的新特性都没用熟,9刚出不久,10-11就不用说了. 为了大家对JDK ...

  8. Chrome浏览器如何完美实现滚动截图技巧

    一.前言 我们平时在浏览网页时,想把碰到好的网页内容或者文章截屏保存,但是网页的长度常常会超出屏幕高度,一般的截屏功能只能截取显示在屏幕上的内容,那我们该如何方便快捷截取全部内容?今天就分享一个如何利 ...

  9. day--39-MySQL的多表查询

    多表查询一:表的基本介绍 可以参考:https://www.cnblogs.com/cdf-opensource-007/p/6517627.html 建立一个员工表信息表和一个部门表,每个员工都对应 ...

  10. 008 Android activity实现多个界面的相互跳转(主要利用Intent)

    1.activity介绍 一个activity就把他理解成一个页面 2.新建activity流程 如图所示在com.lucky.test06的目录下,右击new--->Activity---&g ...