سؤال

I'm using ADO.NET Appender of log4net for logging errors and other info. to database. I see usually the connection string, sql query, parameters all are specified in the configuration.

Is it possible to do that through code? I've a database component in my application and all the interactions with database should be taken care by itself. Whenever I try to log details using log4net I want to call the log method from the database component which will call an SP to record the log information into database. How can I achieve this using log4net?

هل كانت مفيدة؟

المحلول

If I understand you correctly you do not want log4net to call the stored procedure directly. In that case you need to implement your own appender. I suggest that you download the log4net source code and look at the existing appenders.

I would assume that in this case you do not even need to configure the appender in code. It is however possible to do so. If you google you will find many examples like this one: How to configure log4net programmatically from scratch (no config)

نصائح أخرى

Here is an appender config that I've used, which calls a stored procedure directly. It can't call your DAL code, but it can call the stored proc out of the box.

<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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top