Ich habe eine Bibliothek, die ein paar Web-Service-Anrufe hat. Jetzt müssen alle an externe Webdienste gerichteten Anfragen protokolliert und alle erhaltenen Antworten protokolliert werden. Dies ist für interne Audits später.Logging große Nachrichten mit Log4Net AdoNetAppender
Meine SQL-Tabelle sieht so aus.
Beachten Sie, dass im Feld Nachricht die Anfrage und die Antworten des Webdienstes gespeichert sind. Die Antworten sind manchmal sehr groß in der Größenordnung von mehr als 90.000 Zeichen, manchmal sogar mehr. (Flug-/Hotelverfügbarkeitssuche - könnte viele Daten zurückgeben)
Meine Appender-Konfiguration ist wie folgt.
<appender name="InfoAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1"/>
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<connectionString value="Data Source=tcexpress;Initial Catalog=test;Persist Security Info=True;User ID=testUser;Password=**"/>
<commandText value="INSERT INTO WebServiceLog ([Date],[Thread],[Level],[Logger],[Message],[SessionID], [SearchID]) VALUES (@log_date, @thread, @log_level, @logger, @message, @session_id, @search_id)"/>
<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="454751"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter>
<parameter>
<parameterName value="@session_id"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%X{sessionID}"/>
</layout>
</parameter>
<parameter>
<parameterName value="@search_id"/>
<dbType value="String"/>
<size value="25"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%X{searchID}"/>
</layout>
</parameter>
</appender>
Gibt es trotzdem die appender zu sagen, dass mein Feld nText
ist und jede Menge Daten, die ihm gegeben haben könnte? Ich habe versucht, einen sehr hohen Wert für die Feldlänge mit Zeichenfolge festlegen, aber es scheint immer bei einem Wert von 454751 abgeschnitten.
Hat jemand auf dieses Problem gestoßen? Oder gibt es eine bessere Möglichkeit, große Nachrichten mit log4net in der Datenbank zu protokollieren? Jede Hilfe wird sehr geschätzt.
Haben Sie versucht, Größe = -1? Auch 454751 scheint eine große Zahl (400K?). Sie sollten die Daten wahrscheinlich besser komprimieren, bevor Sie sie in die Datenbank einfügen. –
Es ist mir nicht gelungen, die Größe auf -1 zu setzen. Wenn dies der Fall ist, werden Protokollnachrichten nicht in der Datenbank angezeigt (vermutlich aufgrund eines internen Fehlers). – stefann
Einstellung auf -1 funktioniert nicht für mich. Meine Nachrichten sind auf 42k abgeschnitten. – Jacques