首页 > 代码库 > log4net写入DB2备忘 via OLEDB & ODBC
log4net写入DB2备忘 via OLEDB & ODBC
在项目中遇到需要记录操作日志的需求,由于是一个外挂系统,因此不用考虑到公司框架的限制,直接二层架构直连数据库,考虑使用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错误的断点视图,以后可以找到从哪查错咯:
log4net写入DB2备忘 via OLEDB & ODBC