在項目中遇到需要記錄操作日志的需求,由于是一個外掛系統,因此不用考慮到公司框架的限制,直接二層架構直連數據庫,考慮使用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=TCP />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錯誤的斷點視圖,以后可以找到從哪查錯咯:
新聞熱點
疑難解答