Использование sps для вставки информации журнала в log4net
Я использую ADO.NET Appender из log4net для регистрации ошибок и другой информации. в базу данных. Обычно я вижу строку подключения, SQL-запрос, все параметры указаны в конфигурации.
Можно ли сделать это через код? У меня есть компонент базы данных в моем приложении, и обо всех взаимодействиях с базой данных нужно позаботиться отдельно. Всякий раз, когда я пытаюсь зарегистрировать детали с помощью log4net, я хочу вызывать метод log из компонента базы данных, который вызывает SP для записи информации журнала в базу данных. Как я могу добиться этого с помощью log4net?
2 ответа
Если я вас правильно понимаю, вы не хотите, чтобы log4net вызывал хранимую процедуру напрямую. В этом случае вам нужно реализовать свой собственный appender. Я предлагаю вам скачать исходный код log4net и посмотреть на существующие приложения.
Я бы предположил, что в этом случае вам даже не нужно настраивать appender в коде. Однако это возможно сделать. Если вы Google, вы найдете много примеров, как этот: Как настроить log4net программно с нуля (без конфигурации)
Вот конфигурация 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>