2012-11-03 4 views
9

Ich habe eine AdoNetAppender Setup wie folgt aus:Datensätze in log4net AdoNetAppender verzögert?

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

Und es funktioniert technisch, denn wenn ich die Website zu stoppen, die die Aufzeichnungen zeigen, lokal auf IIS 8 Express ausgeführt wird. Das ist aber genau das Problem, die Aufzeichnungen erscheinen nicht, bis ich die Website stoppe.

Ich habe mit useTransactions ein und aus versucht.

Kann jemand dabei helfen?

Antwort

21

Versuchen Sie, die Puffergröße auf eine Einstellung:

<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" /> 

Einige weitere Details: http://weblogs.asp.net/drnetjes/archive/2005/02/16/374780.aspx

+0

Ist das ein Leistungsmerkmal? Wenn ja, gibt es eine Möglichkeit, es zeitbasiert zu machen, anstatt auf der Größe des Puffers zu basieren (d. H., Dass alle Protokolle innerhalb von x Sekunden geleert werden). – NickG

+0

Nicht, dass ich bewusst bin - eine schnelle Suche brachte diese Lösung jedoch: http://StackOverflow.com/Questions/30490536/flush-log4net-Buffer-with-Adonetappender –