·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> log4net写入DB2备忘viaOLEDB&ODBC

log4net写入DB2备忘viaOLEDB&ODBC

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

在项目中遇到需要记录操作日志的需求,由于是一个外挂系统,因此不用考虑到公司框架的限制,直接二层架构直连数据库,考虑使用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

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3   <configSections>
 4     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
 5   </configSections>
 6 
 7   <log4net debug="true">
 8     <root>
 9       <level value="INFO"></level>
10       <!--文件记录格式-->
11       <!--<appender-ref ref="rollingFile"/>-->
12       <appender-ref ref="AdoNetAppender_DB2"/>
13     </root>
14 
15     <appender name="AdoNetAppender_DB2" type="log4net.Appender.AdoNetAppender,log4net">
16       <bufferSize value="1"/>
17 
18        <!--SQL数据源-->
19       <connectionType value="System.Data.Odbc.OdbcConnection, System.Data"/>
20 
21        <!--SQL连接字符串-->
22       <connectionString value="Driver={IBM DB2 ODBC DRIVER};Hostname=192.168.44.11;Port=50001;Database=xxx;Uid=xxx;Pwd=xxx;PRotocol=TCPip;" />
23       <commandText value="INSERT INTO xxx VALUES (' ', ' ', ' ', ?, ' ', ' ')"/>
24 
25       <parameter>
26         <parameterName value="@log_level" />
27         <dbType value="String" />
28         <size value="50" />
29         <layout type="log4net.Layout.PatternLayout" value="%level" />
30       </parameter>
31     </appender>
32   </log4net>
33 </configuration>

 

log4net via OLEDB

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3   <configSections>
 4     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
 5   </configSections>
 6 
 7   <log4net debug="true">
 8     <root>
 9       <level value="INFO"></level>
10       <!--文件记录格式-->
11       <!--<appender-ref ref="rollingFile"/>-->
12       <appender-ref ref="AdoNetAppender_DB2"/>
13     </root>
14     <appender name="AdoNetAppender_DB2" type="log4net.Appender.AdoNetAppender,log4net">
15       <bufferSize value="1" />
16       <connectionType value="System.Data.OleDb.OleDbConnection, System.Data" />
17       <connectionString value="Provider=IBMDADB2;Hostname=192.168.44.11;Port=50001;UID=xxxx;PWD=xxx;Database=xxx;Protocol=TCPIP;" />
18       <commandText value="INSERT INTO xxx VALUES (' ', ' ', ' ', ?, ' ', ' ')" />
19       <parameter>
20         <parameterName value="@message" />
21         <dbType value="String" />
22         <size value="4000" />
23         <layout type="log4net.Layout.PatternLayout">
24           <conversionPattern value="%message" />
25         </layout>
26       </parameter>
27     </appender>
28   </log4net>
29 </configuration>

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