使用 log4net 登录到 Oracle 数据库不会立即更新数据库
Using log4net to log to Oracle database doesn't immediately update the database
我正在我的 Web 应用程序中测试 log4net。
我正在将错误记录到文件以及 Oracle 11g 数据库中的 table。
但是,当我登录到数据库时,我注意到了一些奇怪的行为。
例如,我启动应用程序并生成错误。
- 我可以看到记录到文件中的条目。
- 我在数据库的 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。
我正在我的 Web 应用程序中测试 log4net。
我正在将错误记录到文件以及 Oracle 11g 数据库中的 table。
但是,当我登录到数据库时,我注意到了一些奇怪的行为。
例如,我启动应用程序并生成错误。
- 我可以看到记录到文件中的条目。
- 我在数据库的 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。