利用Log4Net将日志插入至oracle数据库!

  3147人阅读   评论(1)   收藏   举报
  分类:

log4net可以轻易的将信息日志写入文本,但是无论记录在哪里终究还是为了后期发现问题,维护所用。所以为了查询方便,可以将其配置输出至数据库(Oracle)。

一、插入系统默认字段

首先建库,sql如下:

[sql]   view plain  copy
 print ?
  1. -- Create table  
  2. create table SYSTEMLOG  
  3. (  
  4.   log_id        NUMBER not null,  
  5.   log_date      DATE,  
  6.   log_level     VARCHAR2(255),  
  7.   log_identity  VARCHAR2(255),  
  8.   log_message   VARCHAR2(4000),  
  9.   log_exception VARCHAR2(4000),  
  10.   log_logger    VARCHAR2(255),  
  11.   log_source    VARCHAR2(1000),                                                                                                                           )                                                                                                                                                           -- Create sequence   
  12. create sequence SYSTEMLOG_SEQ  
  13. minvalue 1  
  14. maxvalue 999999999  
  15. start with 8061  
  16. increment by 1  
  17. cache 20;  
以上所有字段(除了log_id)均为系统字段,字段的定义可以看配置文件,如下:

[html]   view plain  copy
 print ?
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <configuration>  
  3.   <log4net>  
  4.     <configSections>  
  5.       <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />  
  6.     </configSections>  
  7.     <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">  
  8.       <bufferSize value="1" />  
  9.       <connectionType value="Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342" />  
  10.       <connectionString value="Data Source=//59.74.137.215:1521/GSGLAQYJ;User ID=GSGLAQYJ;Password=GSGLAQYJ;" />  
  11.       <commandText value="INSERT INTO LOG4NET (LOG_ID, LOG_DATE, LOG_LEVEL, LOG_IDENTITY, LOG_MESSAGE, LOG_EXCEPTION, LOG_LOGGER, LOG_SOURCE) VALUES (LOG4NET_SEQ.nextval, :log_date, :log_level, :log_identity, :log_message, :log_exception, :logger, :source)" />  
  12.       <parameter>  
  13.         <parameterName value=":log_date" />  
  14.         <dbType value="DateTime" />  
  15.         <layout type="log4net.Layout.RawTimeStampLayout">  
  16.         </layout>  
  17.       </parameter>  
  18.       <parameter>  
  19.         <parameterName value=":log_level" />  
  20.         <dbType value="String" />  
  21.         <size value="10" />  
  22.         <layout type="log4net.Layout.PatternLayout">  
  23.           <conversionPattern value="%level" />  
  24.         </layout>  
  25.       </parameter>  
  26.       <parameter>  
  27.         <parameterName value=":log_identity" />  
  28.         <dbType value="String" />  
  29.         <size value="100" />  
  30.         <layout type="log4net.Layout.PatternLayout">  
  31.           <conversionPattern value="%identity" />  
  32.         </layout>  
  33.       </parameter>  
  34.       <parameter>  
  35.         <parameterName value=":log_message" />  
  36.         <dbType value="String" />  
  37.         <size value="4000" />  
  38.         <layout type="log4net.Layout.PatternLayout">  
  39.           <conversionPattern value="%m" />  
  40.         </layout>  
  41.       </parameter>  
  42.       <parameter>  
  43.         <parameterName value=":log_exception" />  
  44.         <dbType value="String" />  
  45.         <size value="4000" />  
  46.         <layout type="log4net.Layout.PatternLayout">  
  47.           <conversionPattern value="%exception" />  
  48.         </layout>  
  49.       </parameter>  
  50.       <parameter>  
  51.         <parameterName value=":logger" />  
  52.         <dbType value="String" />  
  53.         <size value="255" />  
  54.         <layout type="log4net.Layout.PatternLayout">  
  55.           <conversionPattern value="%logger" />  
  56.         </layout>  
  57.       </parameter>  
  58.       <parameter>  
  59.         <parameterName value=":source" />  
  60.         <dbType value="String" />  
  61.         <size value="1000" />  
  62.         <layout type="log4net.Layout.PatternLayout">  
  63.           <conversionPattern value="%file:%line" />  
  64.         </layout>  
  65.       </parameter>  
  66.     </appender>  
  67.     <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">  
  68.       <param name="File" value="Log\\LogInfo\\" />  
  69.       <param name="AppendToFile" value="true" />  
  70.       <param name="MaxFileSize" value="10240" />  
  71.       <param name="MaxSizeRollBackups" value="100" />  
  72.       <param name="StaticLogFileName" value="false" />  
  73.       <param name="DatePattern" value="yyyyMMdd".log"" />  
  74.       <param name="RollingStyle" value="Date" />  
  75.       <layout type="log4net.Layout.PatternLayout">  
  76.         <param name="ConversionPattern" value="%n日志时间:%d [%t] %n日志级别:%-5p %n日 志 类:%c [%x] %n%m %n" />  
  77.       </layout>  
  78.     </appender>  
  79.       
  80.     <!--<logger name="loginfo">  
  81.       <level value="INFO" />  
  82.       <appender-ref ref="InfoAppender" />  
  83.     </logger>-->  
  84.     <root>  
  85.       <level value="All"/>  
  86.       <appender-ref ref="ADONetAppender" />  
  87.       <appender-ref ref="InfoAppender" />  
  88.     </root>  
  89.   </log4net>  
  90. </configuration>  


以上配置文件最主要的就是一下几行:

[html]   view plain  copy
 print ?
  1. <connectionType value="Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral,                                  PublicKeyToken=89b483f429c47342" />  
  2.      <connectionString value="Data Source=//xx.xx.xx.xx:1521/xxx;User ID=xxx;Password=xxx;" />  
  3.      <commandText value="INSERT INTO   
  4. YSTEMLOG (LOG_ID, LOG_DATE, LOG_LEVEL, LOG_IDENTITY, LOG_MESSAGE, LOG_EXCEPTION, LOG_LOGGER, LOG_SOURCE) VALUES                                                 (LOG4NET_SEQ.nextval, :log_date, :log_level, :log_identity, :log_message, :log_exception, :logger, :source)" />  


1.Oracle.DataAccess.dll

就好比你自己写sql语句一样,无论那种数据库都得引一个XXXclient的库,后面的公钥要写对,查询一个dll的公开密钥可以先打开vs的命令工具,将dll放入命令工具的当前目录下,然后输入SN -T 回车即可获得公钥.

2.Oracle.DataAccess.Client.OracleConnection

这个就不用说了,肯定是连接数据库的字符串,网上好多格式都不对,这里我贴出了详细的格式

[html]   view plain  copy
 print ?
  1. <connectionString value="Data Source=//xx.xx.xx.xx:1521/xxx;User ID=xxx;Password=xxx;" />  
3.插入语句

[html]   view plain  copy
 print ?
  1. <pre name="code" class="html"><commandText value="INSERT INTO   
  2. SYSTEMLOG (LOG_ID, LOG_DATE, LOG_LEVEL, LOG_IDENTITY, LOG_MESSAGE, LOG_EXCEPTION, LOG_LOGGER, LOG_SOURCE) VALUES  
  3. (LOG4NET_SEQ.nextval, :log_date, :log_level, :log_identity, :log_message, :log_exception, :logger, :source)" /></pre>  

一定要注意变量的个数要一致,oracle变量默认以冒号开头。
4.其他配置

其他配置与写入文件的配置一样,可以参考上一篇,没有特别提出的都是在上篇的配置基础上继续进行的。

最后,调用代码如下:

[csharp]   view plain  copy
 print ?
  1. class Program  
  2.    {  
  3.        private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);  
  4.          
  5.        static void Main(string[] args)  
  6.        {  
  7.                log.Info("我");  
  8.                log.Warn("你");  
  9.                log.Debug("他");  
  10.                log.Error("她");  
  11.                log.Fatal("它");          
  12.                Console.ReadLine();  
  13.        }  
  14.    }  

结果如下图:



注意事项:

项目需要log4net.dll,和其对应的.config和xml文件,并且需要引入上面的Oracle.DataAccess.dll,若没有oracle客户端,则就需要将pl/sql中的几个必备库拷贝至debug目录才能执行成功。所需库文件已上传http://download.csdn.net/detail/kkkkkxiaofei/6436383

二、插入自定义字段

sql如下:

[sql]   view plain  copy
 print ?
  1. -- Create table  
  2. create table SYSTEMLOG  
  3. (  
  4.   log_id        NUMBER not null,  
  5.   log_date      DATE,  
  6.   log_level     VARCHAR2(255),  
  7.   log_identity  VARCHAR2(255),  
  8.   log_message   VARCHAR2(4000),  
  9.   log_exception VARCHAR2(4000),  
  10.   log_logger    VARCHAR2(255),  
  11.   log_source    VARCHAR2(1000),  
  12.   loginid       VARCHAR2(100),  
  13.   loginname     VARCHAR2(100),  
  14.   menuname      VARCHAR2(100),  
  15.   actionname    VARCHAR2(100),  
  16.   remark        VARCHAR2(1000),  
  17.   terminalno    VARCHAR2(30),  
  18.   orderno       VARCHAR2(10)  
  19. )  
  20. -- Create sequence   
  21. create sequence SYSTEMLOG_SEQ  
  22. minvalue 1  
  23. maxvalue 999999999  
  24. start with 8061  
  25. increment by 1  
  26. cache 20;  


插入自定义字段需要继承log4net里的基类,先看配置文件

[html]   view plain  copy
 print ?
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <configuration>  
  3.   <configSections>  
  4.     <section name="log4net" type="System.Configuration.IgnoreSectionHandler, log4net" />  
  5.   </configSections>  
  6.   <log4net>  
  7.   
  8.     <logger name="RollingLogFileAppender">  
  9.       <level value="ALL" />  
  10.       <appender-ref ref="RollingLogFileAppender" />  
  11.     </logger>  
  12.   
  13.     <logger name="AdoNetAppender_Oracle">  
  14.       <level value="ALL" />  
  15.       <appender-ref ref="AdoNetAppender_Oracle" />  
  16.     </logger>  
  17.   
  18.     <logger name="WarningDatail_Oracle">  
  19.       <level value="ALL" />  
  20.       <appender-ref ref="WarningDatail_Oracle" />  
  21.     </logger>  
  22.   
  23.     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">  
  24.       <!--日志的路径-->  
  25.       <file value="./GSGLAQYJLOG/ExecuteInfo.log" />  
  26.       <!--是否覆盖,默认是追加true-->  
  27.       <appendToFile value="true" />  
  28.       <!--按照文件的大小进行变换日志文件-->  
  29.       <rollingStyle value="Size" />  
  30.       <!--按照日期变换文件名称  
  31.       <rollingStyle value="Date" />  
  32.       <datePattern value="yyyyMMdd-HHmm'.log'" />  
  33.       -->  
  34.       <!--设置无限备份=-1 ,最大备份数为1000-->  
  35.       <maxSizeRollBackups value="-1" />  
  36.       <!--每个文件的最大2M-->  
  37.       <maximumFileSize value="2MB" />  
  38.       <!--日志文件名是否为静态-->  
  39.       <staticLogFileName value="false" />  
  40.       <!--输出文件格式-->  
  41.       <layout type="log4net.Layout.PatternLayout">  
  42.         <conversionPattern value="%d [%t] %-5p %c [%x] - %m [%r]%n" />  
  43.       </layout>  
  44.       <!--輸出文件格式説明:  
  45.          %d      输出当前语句运行的时刻  
  46.          %t      当前语句所在的线程  
  47.          %-数字:表示该项的最小长度,如果不够,则用空格填充  
  48.          %p      日志的当前优先级别,即DEBUG、INFO<、WARN…等  
  49.          %m      输出的日志消息,如ILog.Debug(…)>输出的一条消息  
  50.          %n      换行  
  51.          %r      運行的時間    
  52.          %c      当前日志对象的名称  
  53.       -->  
  54.       <!--Log4net 多线程写入-->  
  55.       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />  
  56.     </appender>  
  57.   
  58.     <!--日志记录数据库-->  
  59.     <appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">  
  60.       <bufferSize  value="1"/>  
  61.       <!--<connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=4.0.30319.1, Culture=neutral, PublicKeyToken=b77a5c561934e089" />-->  
  62.       <connectionType value="Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342" />  
  63.       <connectionString value="DATA SOURCE=//59.74.137.215:1521/GSGLAQYJ;USER ID=GSGLAQYJ;PASSWORD=GSGLAQYJ"/>  
  64.       <!--<commandText value="INSERT INTO LOG4NET (LOG_ID, LOG_DATE, LOG_LEVEL, LOG_IDENTITY, LOG_MESSAGE, LOG_EXCEPTION, LOG_LOGGER, LOG_SOURCE) VALUES (LOG4NET_SEQ.nextval, :log_date, :log_level, :log_identity, :log_message, :log_exception, :logger, :source)" />-->  
  65.       <commandText value="INSERT INTO SYSTEMLOG (LOG_ID, LOG_DATE,LOG_LEVEL,LOG_IDENTITY,LOG_MESSAGE,LOG_EXCEPTION,LOG_LOGGER,LOG_SOURCE,LOGINID,LOGINNAME,MENUNAME,ACTIONNAME,REMARK) VALUES   
  66.                           (SYSTEMLOG_SEQ.nextval,:log_date,:log_level,:log_identity,:log_message,:log_exception,:logger,:source,:LoginID,:LoginName,:MenuName,:ActionName,:Remark)" />  
  67.       <parameter>  
  68.         <parameterName value=":log_date" />  
  69.         <dbType value="DateTime" />  
  70.         <layout type="log4net.Layout.RawTimeStampLayout" />  
  71.       </parameter>  
  72.       <parameter>  
  73.         <parameterName value=":log_level" />  
  74.         <dbType value="String" />  
  75.         <size value="10" />  
  76.         <layout type="log4net.Layout.PatternLayout">  
  77.           <conversionPattern value="%level" />  
  78.         </layout>  
  79.       </parameter>  
  80.       <parameter>  
  81.         <parameterName value=":log_identity" />  
  82.         <dbType value="String" />  
  83.         <size value="100" />  
  84.         <layout type="log4net.Layout.PatternLayout">  
  85.           <conversionPattern value="%identity" />  
  86.         </layout>  
  87.       </parameter>  
  88.       <parameter>  
  89.         <parameterName value=":log_message" />  
  90.         <dbType value="String" />  
  91.         <size value="4000" />  
  92.         <layout type="log4net.Layout.PatternLayout">  
  93.           <conversionPattern value="%m" />  
  94.         </layout>  
  95.       </parameter>  
  96.       <parameter>  
  97.         <parameterName value=":log_exception" />  
  98.         <dbType value="String" />  
  99.         <size value="4000" />  
  100.         <layout type="log4net.Layout.PatternLayout">  
  101.           <conversionPattern value="%exception" />  
  102.         </layout>  
  103.       </parameter>  
  104.       <parameter>  
  105.         <parameterName value=":logger" />  
  106.         <dbType value="String" />  
  107.         <size value="255" />  
  108.         <layout type="log4net.Layout.PatternLayout">  
  109.           <conversionPattern value="%logger" />  
  110.         </layout>  
  111.       </parameter>  
  112.       <parameter>  
  113.         <parameterName value=":source" />  
  114.         <dbType value="String" />  
  115.         <size value="1000" />  
  116.         <layout type="log4net.Layout.PatternLayout">  
  117.           <conversionPattern value="%file:%line" />  
  118.         </layout>  
  119.       </parameter>  
  120.       <!--自定义属性-->  
  121.       <parameter>  
  122.         <parameterName value=":LoginID" />  
  123.         <dbType value="String" />  
  124.         <size value="100" />  
  125.         <layout type="Log4netHandler.CustomLayout">  
  126.           <conversionPattern value="%LoginID" />  
  127.         </layout>  
  128.       </parameter>  
  129.       <parameter>  
  130.         <parameterName value=":LoginName" />  
  131.         <dbType value="String" />  
  132.         <size value="100" />  
  133.         <layout type="Log4netHandler.CustomLayout">  
  134.           <conversionPattern value="%LoginName" />  
  135.         </layout>  
  136.       </parameter>  
  137.       <parameter>  
  138.         <parameterName value=":MenuName" />  
  139.         <dbType value="String" />  
  140.         <size value="100" />  
  141.         <layout type="Log4netHandler.CustomLayout">  
  142.           <conversionPattern value="%MenuName" />  
  143.         </layout>  
  144.       </parameter>  
  145.       <parameter>  
  146.         <parameterName value=":ActionName" />  
  147.         <dbType value="String" />  
  148.         <size value="100" />  
  149.         <layout type="Log4netHandler.CustomLayout">  
  150.           <conversionPattern value="%ActionName" />  
  151.         </layout>  
  152.       </parameter>  
  153.       <parameter>  
  154.         <parameterName value=":Remark" />  
  155.         <dbType value="String" />  
  156.         <size value="1000" />  
  157.         <layout type="Log4netHandler.CustomLayout">  
  158.           <conversionPattern value="%Remark" />  
  159.         </layout>  
  160.       </parameter>  
  161.     </appender>  
  162.     <appender name="WarningDatail_Oracle" type="log4net.Appender.AdoNetAppender">  
  163.       <bufferSize  value="1"/>  
  164.       <connectionType value="Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342" />  
  165.       <connectionString value="DATA SOURCE=//59.74.137.215:1521/GSGLAQYJ;USER ID=GSGLAQYJ;PASSWORD=GSGLAQYJ"/>  
  166.       <commandText value="INSERT INTO SYSTEMLOG (LOG_ID, LOG_DATE,TERMINALNO,ORDERNO) VALUES (SYSTEMLOG_SEQ.nextval,:log_date,:terminalno,:orderno)" />  
  167.       <parameter>  
  168.         <parameterName value=":log_date" />  
  169.         <dbType value="DateTime" />  
  170.         <layout type="log4net.Layout.RawTimeStampLayout" />  
  171.       </parameter>  
  172.       <!--自定义属性:-->  
  173.       <parameter>  
  174.         <parameterName value=":terminalno" />  
  175.         <dbType value="String" />  
  176.         <size value="30" />  
  177.         <layout type="Log4netHandler.CustomLayout">  
  178.           <conversionPattern value="%TerminalNo" />  
  179.         </layout>  
  180.       </parameter>  
  181.       <parameter>  
  182.         <parameterName value=":orderno" />  
  183.         <dbType value="String" />  
  184.         <size value="10" />  
  185.         <layout type="Log4netHandler.CustomLayout">  
  186.           <conversionPattern value="%OrderNo" />  
  187.         </layout>  
  188.       </parameter>  
  189.     </appender>  
  190.   
  191.   </log4net>  
  192. </configuration>  
配置文件定义了三个节点

[html]   view plain  copy
 print ?
  1. <logger name="RollingLogFileAppender">  
  2.       <level value="ALL" />  
  3.       <appender-ref ref="RollingLogFileAppender" />  
  4.     </logger>  
  5.   
  6.     <logger name="AdoNetAppender_Oracle">  
  7.       <level value="ALL" />  
  8.       <appender-ref ref="AdoNetAppender_Oracle" />  
  9.     </logger>  
  10.   
  11.     <logger name="WarningDatail_Oracle">  
  12.       <level value="ALL" />  
  13.       <appender-ref ref="WarningDatail_Oracle" />  
  14.     </logger>  
每一个logger就相当一个root(上面插入系统字段时用的是root,两者都行),一个logger对应一个appender,分别是:

写入文本的节点:

[html]   view plain  copy
 print ?
  1. <logger name="RollingLogFileAppender">  
  2.       <level value="ALL" />  
  3.       <appender-ref ref="RollingLogFileAppender" />  
  4.     </logger>  
写入数据库的字段(一部分自定义字段):

[html]   view plain  copy
 print ?
  1. <logger name="AdoNetAppender_Oracle">  
  2.       <level value="ALL" />  
  3.       <appender-ref ref="AdoNetAppender_Oracle" />  
  4.     </logger>  
写入数据库的字段(另一部分自定义字段)

[html]   view plain  copy
 print ?
  1. <logger name="WarningDatail_Oracle">  
  2.      <level value="ALL" />  
  3.      <appender-ref ref="WarningDatail_Oracle" />  
  4.    </logger>  
其中自定义字段分两个节点是因为最后一个节点是在warn级别时才记录入库,而前者在info级别就入库了,这么做有利于分开处理。到时候插入库的时候也会发现插入前者时后者为空,而插入后者时前者也为空。

自定义节点如下:

[html]   view plain  copy
 print ?
  1. <!--自定义属性:-->  
  2.      <parameter>  
  3.        <parameterName value=":terminalno" />  
  4.        <dbType value="String" />  
  5.        <size value="30" />  
  6.        <layout type="Log4netHandler.CustomLayout">  
  7.          <conversionPattern value="%TerminalNo" />  
  8.        </layout>  
  9.      </parameter>  
  10.      <parameter>  
  11.        <parameterName value=":orderno" />  
  12.        <dbType value="String" />  
  13.        <size value="10" />  
  14.        <layout type="Log4netHandler.CustomLayout">  
  15.          <conversionPattern value="%OrderNo" />  
  16.        </layout>  
  17.      </parameter>  
以第一个节点为例,插入时的变量为:terminalno,在重写的类里,该变量是做为属性TerminalNo出现的,其实就是将类里的TerminalNo利用反射转换为oracle所能识别的变量:terminalno

代码如下:

1.实现该属性的类

[csharp]   view plain  copy
 print ?
  1. internal sealed class TerminalNo : PatternLayoutConverter  
  2.    {  
  3.        // Methods  
  4.        protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)  
  5.        {  
  6.            LogContent content = loggingEvent.MessageObject as LogContent;  
  7.            if (content != null)  
  8.            {  
  9.                writer.Write(content.TerminalNo);  
  10.            }  
  11.        }  
  12.    }  

其他几个变量一样,都需要继承PatterLayoutConverter

2.反射

[csharp]   view plain  copy
 print ?
  1.   
[csharp]   view plain  copy
 print ?
  1. namespace Log4netHandler  
  2. {  
  3.      public class CustomLayout:PatternLayout  
  4.     {  
  5.         // Methods  
  6.         public CustomLayout()  
  7.         {  
  8.              
  9.             base.AddConverter("TerminalNo"typeof(TerminalNo));  
  10.              
  11.         }  
  12.   
  13.     }  
  14. }  
再看上面自定义属性时的配置文件,里面有一行
[html]   view plain  copy
 print ?
  1. <layout type="Log4netHandler.CustomLayout">  
这时看到这个类想必就应该有所领悟了吧.

3.封装节点

[csharp]   view plain  copy
 print ?
  1. public class OperaterLog  
  2.     {  
  3.         // Fields  
  4.         private static ILog logfile;  
  5.         private static ILog logoracle;  
  6.         private static ILog logwaring;  
  7.   
  8.         // Methods  
  9.         public static ILog Login2File()  
  10.         {  
  11.             return (logfile = LogManager.GetLogger("文件节点"));  
  12.         }  
  13.   
  14.         public static ILog Login2Oracle()  
  15.         {  
  16.             return (logoracle = LogManager.GetLogger("数据库节点1"));  
  17.         }  
  18.   
  19.         public static ILog LoginWarning()  
  20.         {  
  21.             return (logwaring = LogManager.GetLogger("数据库节点2"));  
  22.         }  
  23.     }  
4.调用

[csharp]   view plain  copy
 print ?
  1. class Program  
  2.    {   
  3.        static void Main(string[] args)  
  4.        {   
  5.           Log4netHandler.LogContent msg = new Log4netHandler.LogContent();  
  6.           msg.LoginID = "OutSocket_LoginID";  
  7.           msg.LoginName = "OutSocket_LoginName";  
  8.           msg.MenuName = "OutSocket_MenuName";  
  9.           msg.ActionName = "OutSocket_ActionName";  
  10.           msg.Remark = "12312";  
  11.           msg.TerminalNo = "空123";  
  12.           msg.OrderNo = "空2323";  
  13.           Log4netHandler.OperaterLog.Login2Oracle().Info(msg);  
  14.           Log4netHandler.OperaterLog.Login2File().Info("12312");  
  15.           Log4netHandler.OperaterLog.LoginWarning().Info(msg);  
  16.           Console.Read();  
  17.           }  
  18.        }  
  19.    }  

5.结果如下



如上面所说,插入第一部分自定义字段时后面两个为空,插入后面两个时前面也为空,这些都取决于封装的时候读取的节点。最后要说明一下,整个调试过程十分恶心,无论是出现任何错误,用Log4Net调用oracle时都不报错,所以必须十分小心,记得把项目类型换成.net 4,不然会吐血的。再次吐槽CSDN的排版,蛋疼。。

























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值