log4net输出日志到Oracle数据库

关于log4net的使用,请参考文章:https://www.cnblogs.com/duanjt/p/5850250.html
前面的使用方式都一样,这里主要就说说appender的配置。
1.创建Oracle中的表

create table bdcdataar.log4net_log
(
       no    int primary key,--序号
       log_date  date,--时间
       log_thread    int,--线程号
       log_level     varchar2(10),--日志等级
       log_location  varchar2(500),--日志位置
       log_message   clob,--消息
       log_exception clob,--异常
       system_id varchar2(50)  --系统id,用于标识不同的系统
);

create sequence bdcdataar.log4net_log_seq
minvalue 1  
maxvalue 999999999  
start with 1
increment by 1;  

2.appender的配置

<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender,log4net">
    <!--BufferSize为缓冲区大小,只有日志记录超设定值才会一块写入到数据库-->
    <bufferSize value="10" />

    <!--引用-->
    <connectionType value="Oracle.ManagedDataAccess.Client.OracleConnection,Oracle.ManagedDataAccess,Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>

    <!--连接数据库字符串-->
    <connectionString value="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.103.105)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=wifi)));User Id=stic;Password=soft;" />

    <!--插入到表Log-->
    <commandText value="insert into bdcdataar.log4net_log(no,log_date,log_thread,log_level,log_location,log_message,log_exception,system_id) values(bdcdataar.log4net_log_seq.nextval,:log_date,:log_thread,:log_level,:log_location,:log_message,:log_exception,'产品管理系统')" />

    <!--日志记录时间,RawTimeStampLayout为默认的时间输出格式-->
    <parameter>
      <parameterName value=":log_date" />
      <dbType value="DateTime"/>
      <layout type="log4net.Layout.RawTimeStampLayout"/>
    </parameter>

    <!--线程号-->
    <parameter>
      <parameterName value=":log_thread" />
      <dbType value="Int32" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%thread" />
      </layout>
    </parameter>

    <!--日志等级-->
    <parameter>
      <parameterName value=":log_level" />
      <dbType value="String" />
      <size value="10" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level" />
      </layout>
    </parameter>

    <!--记录日志的位置-->
    <parameter>
      <parameterName value=":log_location" />
      <dbType value="String" />
      <size value="500" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%location" />
      </layout>
    </parameter>

    <!--日志消息-->
    <parameter>
      <parameterName value=":log_message" />
      <dbType value="String" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
      </layout>
    </parameter>
 
    <!--异常信息。ExceptionLayout 为异常输出的默认格式-->
    <parameter>
      <parameterName value=":log_exception" />
      <dbType value="String" />
      <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
</appender>

关于使用方法这里就不说了,下面说一下connectionType的配置,这里涉及到Version和PublicKeyToken。
Version,直接找到对应的dll,然后右键-属性就能看到
PublicKeyToken,需要借助vs命令工具,SN -T Autofac.dll。后面的dll是相对路径

最后插入数据库的效果如下:

  

注意:

1.如果需要查看插入数据库的过程,需要在app.config中增加如下配置:

<appSettings>
     <add key="log4net.Internal.Debug" value="true "/>
</appSettings>

 2.xml中配置的参数一定要和sql中的参数顺序一致。

原文地址:https://www.cnblogs.com/duanjt/p/13163934.html