2012-04-10 6 views
0

Ich verwende ADO.NET Appender von log4net für Protokollierungsfehler und andere Informationen. zur Datenbank. Ich sehe normalerweise die Verbindungszeichenfolge, SQL-Abfrage, alle Parameter sind in der Konfiguration angegeben.Verwenden von sps zum Einfügen von Protokollinformationen in log4net

Ist es möglich, das über Code zu tun? Ich habe eine Datenbank-Komponente in meiner Anwendung und alle Interaktionen mit der Datenbank sollten von selbst durchgeführt werden. Wann immer ich versuche, Details mit log4net zu protokollieren, möchte ich die Protokollmethode von der Datenbankkomponente aufrufen, die einen SP aufruft, um die Protokollinformationen in der Datenbank aufzuzeichnen. Wie kann ich dies mit log4net erreichen?

Antwort

0

Wenn ich Sie richtig verstehe, möchten Sie nicht, dass log4net die gespeicherte Prozedur direkt aufruft. In diesem Fall müssen Sie einen eigenen Appender implementieren. Ich schlage vor, dass Sie den log4net-Quellcode herunterladen und sich die vorhandenen Appender ansehen.

Ich würde davon ausgehen, dass Sie in diesem Fall nicht einmal den Appender in Code konfigurieren müssen. Es ist jedoch möglich, dies zu tun. Wenn Sie googlen, finden Sie viele Beispiele wie dieses: How to configure log4net programmatically from scratch (no config)

1

Hier ist eine Appender Config, die ich verwendet habe, die eine gespeicherte Prozedur direkt aufruft. Er kann Ihren DAL-Code nicht anrufen, aber er kann den gespeicherten Prozess aus der Box heraus aufrufen.

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
<bufferSize value="1" /> 
<threshold value="INFO" /> 
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
<connectionString value="data source=<your_server>;initial catalog=<database_name>;User ID=<user_id>;Password=<pwd>" /> 
<commandText value="dbo.spLogInsert" /> 
<commandType value="StoredProcedure" /> 
<parameter> 
<parameterName value="@log_date_utc" /> 
<dbType value="DateTime" /> 
<layout type="log4net.Layout.RawTimeStampLayout"> 
<conversionPattern value="%utcdate" /> 
</layout> 
</parameter> 
<parameter> 
<parameterName value="@log_date_local" /> 
<dbType value="DateTime" /> 
<layout type="log4net.Layout.RawTimeStampLayout"> 
<conversionPattern value="%date" /> 
</layout> 
</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="@exception" /> 
<dbType value="String" /> 
<size value="2000" /> 
<layout type="log4net.Layout.ExceptionLayout" /> 
</parameter> 
<parameter> 
<parameterName value="@server" /> 
<dbType value="String" /> 
<size value="2000" /> 
<layout type="log4net.Layout.PatternLayout"> 
<conversionPattern value="%property{log4net:HostName}"/> 
</layout> 
</parameter> 
</appender>