使用 log4net 登录到 Oracle 数据库不会立即更新数据库

Using log4net to log to Oracle database doesn't immediately update the database

我正在我的 Web 应用程序中测试 log4net。
我正在将错误记录到文件以及 Oracle 11g 数据库中的 table。

但是,当我登录到数据库时,我注意到了一些奇怪的行为。

例如,我启动应用程序并生成错误。

然后我关闭应用程序并重新启动它。
就在那时,我在 oracle table.

中看到了之前的错误

我将我的根节点设置为:

<root>
  <level value="ALL"/>
  <appender-ref ref="LogFileAppender" />
  <appender-ref ref="AdoNetAppender_Oracle"/>
</root>

appender 非常基本,就像我在网上找到的任何示例一样。

Oracle Appender:

<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
  <connectionType value="Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  <connectionString value="my stuff"/>
  <commandText value="INSERT INTO MY_TABLE (Datetime,Thread,Log_Level,Logger,Message,STACK_TRACE) VALUES (:log_date, :thread, :log_level, :logger, :message, :stackTrace)"/>
  <bufferSize value="128"/>
  <parameter>
    <parameterName value=":log_date"/>
    <dbType value="DateTime"/>
    <layout type="log4net.Layout.RawTimeStampLayout"/>
  </parameter>
  <parameter>
    <parameterName value=":thread"/>
    <dbType value="String"/>
    <size value="255"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%thread"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value=":log_level"/>
    <dbType value="String"/>
    <size value="50"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value=":logger"/>
    <dbType value="String"/>
    <size value="255"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%logger"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value=":message"/>
    <dbType value="String"/>
    <size value="4000"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value=":stackTrace"/>
    <dbType value="String"/>
    <size value="4000"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{StackTrace}"/>
    </layout>
  </parameter>
</appender>

我很肯定你在 appender 中的缓冲区大小有问题。在你的 ado appender 中应该有一行 <bufferSize value ="x" />

缓冲区大小是在写入 table 之前发生的错误数。要查看实时错误,请将 x 更改为 1。