2012-11-03 82 views
9

我有一個AdoNetAppender設置是這樣的:Log4net AdoNetAppender中的記錄延遲?

<log4net> 
    <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender"> 
     <connectionStringName value="DefaultConnection" /> 
     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" /> 
     <useTransactions value="false" /> 
     <parameter> 
     <parameterName value="@log_date" /> 
     <dbType value="DateTime" /> 
     <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" /> 
     </parameter> 
     <parameter> 
     <parameterName value="@thread" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout" value="%thread" /> 
     </parameter> 
     <parameter> 
     <parameterName value="@log_level" /> 
     <dbType value="String" /> 
     <size value="50" /> 
     <layout type="log4net.Layout.PatternLayout" value="%level" /> 
     </parameter> 
     <parameter> 
     <parameterName value="@logger" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout" value="%logger" /> 
     </parameter> 
     <parameter> 
     <parameterName value="@message" /> 
     <dbType value="String" /> 
     <size value="4000" /> 
     <layout type="log4net.Layout.PatternLayout" value="%message" /> 
     </parameter> 
    </appender> 

    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="AdoNetAppender_SqlServer" /> 
    </root> 
    </log4net> 

,技術上它工作,因爲當我停止對IIS 8快車運行的網站在本地的記錄顯示出來。 但是,這正是問題所在,直到我停止網站時,記錄才顯示出來。

我試過用useTransactions開啓和關閉。

有人可以幫忙嗎?

回答

21

嘗試緩衝區的大小設置爲1:

<appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender"> 
     <connectionStringName value="DefaultConnection" /> 
     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" /> 
     <useTransactions value="false" /> 
     <bufferSize value="1" /> 

更多的細節:http://weblogs.asp.net/drnetjes/archive/2005/02/16/374780.aspx

+0

這是一個性能特點?如果是這樣,是否有辦法使其基於時間而不是基於緩衝區的大小(即保證所有日誌在x秒內刷新)。 – NickG

+0

不是我意識到 - 快速搜索帶來了這個解決方案雖然:http://stackoverflow.com/questions/30490536/flush-log4net-buffer-with-adonetappender –