2012-04-10 27 views
0

我正在使用ADO.NET Appenderlog4net用於記錄錯誤和其他信息。到數據庫。我通常會看到連接字符串,sql查詢,參數都在配置中指定。使用sps在log4net中插入日誌信息

通過代碼可以做到這一點嗎?我在我的應用程序中有一個數據庫組件,所有與數據庫的交互都應該自己處理。每當我嘗試使用log4net記錄詳細信息時,我想調用數據庫組件中的日誌方法,該方法將調用SP將日誌信息記錄到數據庫中。我如何使用log4net來實現這一點?

回答

0

如果我正確理解你,你不希望log4net直接調用存儲過程。在這種情況下,你需要實現你自己的appender。我建議你下載log4net源代碼並查看現有的appender。

我會假設在這種情況下,你甚至不需要在代碼中配置appender。但是可以這樣做。如果你谷歌,你會發現很多這樣的例子:How to configure log4net programmatically from scratch (no config)

1

這是一個appender配置,我用它直接調用存儲過程。它不能調用你的DAL代碼,但它可以調用開箱即用的存儲過程。

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