Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用log4net登录到Oracle数据库不会';不要立即更新数据库_C#_Oracle_Oracle11g_Log4net - Fatal编程技术网

C# 使用log4net登录到Oracle数据库不会';不要立即更新数据库

C# 使用log4net登录到Oracle数据库不会';不要立即更新数据库,c#,oracle,oracle11g,log4net,C#,Oracle,Oracle11g,Log4net,我正在我的web应用程序中测试log4net我正在将错误记录到Oracle 11g数据库中的文件和表中 然而,当我登录到数据库时,我注意到了一些奇怪的行为 例如,我启动应用程序并生成一个错误 我可以看到登录到文件中的条目 我在数据库的表中没有看到条目 然后关闭应用程序并重新启动它。 就在这时,我在oracle表中看到了前面的错误 我将根节点设置为: <root> <level value="ALL"/> <appender-ref ref="LogFil

我正在我的web应用程序中测试log4net
我正在将错误记录到Oracle 11g数据库中的文件和表中

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

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

  • 我可以看到登录到文件中的条目
  • 我在数据库的表中没有看到条目
然后关闭应用程序并重新启动它。
就在这时,我在oracle表中看到了前面的错误

我将根节点设置为:

<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中应该有一行


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

您是否可以发布附加器本身。您当前设置为128,因此在缓冲区中存储128个错误之前,您不会在db中看到错误。然后,它会写入db(或者,如果您关闭并重新打开,它将写入)。就是这样。谢谢你。很高兴能帮忙。查看本教程,了解log4net的精彩介绍。