2016-02-22 107 views
2

我在我的web應用程序中測試log4net。
我將錯誤記錄到Oracle 11g數據庫中的文件以及表中。使用log4net登錄到Oracle數據庫不會立即更新數據庫

但是,當我登錄到數據庫時,我注意到特有的行爲。

例如,我啓動應用程序併產生一個錯誤。

  • 我可以看到登錄到文件中的條目。
  • 我在數據庫中看不到表中的條目。

然後關閉應用程序並重新啓動它。
正是在這一點上,我纔看到oracle表中以前的錯誤。

我有我的根節點設置爲:

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

的追加程序就像任何的,我在網上找到的例子非常基本的。

甲骨文追加程序:

<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> 
+0

請問您是否可以發佈appender本身。 – Jacobr365

+0

將其添加爲編輯 – PrivateJoker

回答

1

我敢肯定的你有在附加器的緩衝區大小的問題。在你的adoppender中應該有一行<bufferSize value ="x" />

緩衝區大小是在寫入表之前出現多少錯誤。要查看直播錯誤,請將x更改爲1.

+0

您目前設置爲128,因此您不會在db中看到錯誤,直到其中有128個存儲到緩衝區。然後寫入db(或者如果關閉並重新打開,將會寫入)。 – Jacobr365

+0

就是這樣。謝謝。 – PrivateJoker

+0

很高興幫助。看看這個教程,瞭解log4net的一個很好的介紹。 https://www.youtube.com/watch?v=2lAdQ_QwNww – Jacobr365