Ведение журнала и определение элементов журнала в компоненте потока данных
Пользовательские компоненты потока данных могут помещать сообщения в существующую запись журнала с помощью метода PostLogMessage интерфейса IDTSComponentMetaData100. Они могут также предоставлять информацию для пользователя с помощью метода FireInformation или подобных методов интерфейса IDTSComponentMetaData100. Однако этот подход создает нагрузку по вызову и обработке дополнительных событий и заставляет пользователя фильтровать многочисленные информационные сообщения в поисках сообщений, которые могут представлять интерес. Можно использовать собственный формат записи журнала, как показано далее, для предоставления пользователям разработанного компонента точно обозначенной информации.
Регистрация и использование пользовательской записи журнала
Регистрация пользовательской записи журнала
Для регистрации пользовательской записи журнала, чтобы ее мог использовать разрабатываемый компонент, нужно переопределить метод RegisterLogEntries базового класса PipelineComponent. В следующем примере проводится регистрация пользовательской записи журнала и передается имя и описание.
using Microsoft.SqlServer.Dts.Runtime;
...
private const string MyLogEntryName = "My Custom Component Log Entry";
private const string MyLogEntryDescription = "Log entry from My Custom Component ";
...
public override void RegisterLogEntries()
{
this.LogEntryInfos.Add(MyLogEntryName,
MyLogEntryDescription,
Microsoft.SqlServer.Dts.Runtime.Wrapper.DTSLogEntryFrequency.DTSLEF_CONSISTENT);
}
Imports Microsoft.SqlServer.Dts.Runtime
...
Private Const MyLogEntryName As String = "My Custom Component Log Entry"
Private Const MyLogEntryDescription As String = "Log entry from My Custom Component "
...
Public Overrides Sub RegisterLogEntries()
Me.LogEntryInfos.Add(MyLogEntryName, _
MyLogEntryDescription, _
Microsoft.SqlServer.Dts.Runtime.Wrapper.DTSLogEntryFrequency.DTSLEF_CONSISTENT)
End Sub
Перечисление DTSLogEntryFrequency подсказывает во время выполнения, как часто событие будет заноситься в журнал.
DTSLEF_OCCASIONAL: Событие заносится в журнал только иногда, но не во время каждого выполнения.
DTSLEF_CONSISTENT: Событие заносится в журнал определенное количество раз во время каждого выполнения.
DTSLEF_PROPORTIONAL: Событие заносится в журнал несколько раз пропорционально объему выполненной работы.
В приведенном выше примере используется значение DTSLEF_CONSISTENT, поскольку ожидается, что компонент будет создавать запись в журнале один раз во время каждого выполнения.
После регистрации собственного формата записи журнала и добавления экземпляра пользовательского компонента в рабочую область конструктора потока данных диалоговое окно Ведение журнала в конструкторе выводит новую запись журнала с именем «Мой собственный формат записи журнала» в списке доступных записей журнала.
Внесение в журнал пользовательской записи
После регистрации пользовательской записи журнала компонент может создавать такие записи в журнале. В приведенном ниже примере пользовательская запись журнала заносится в журнал во время работы метода PreExecute, содержащего текст инструкции SQL, используемой компонентом.
public override void PreExecute()
{
DateTime now = DateTime.Now;
byte[] additionalData = null;
this.ComponentMetaData.PostLogMessage(MyLogEntryName,
this.ComponentMetaData.Name,
"Command Sent was: " + myCommand.CommandText,
now, now, 0, ref additionalData);
}
Public Overrides Sub PreExecute()
Dim now As DateTime = DateTime.Now
Dim additionalData As Byte() = Nothing
Me.ComponentMetaData.PostLogMessage(MyLogEntryName, _
Me.ComponentMetaData.Name, _
"Command Sent was: " + myCommand.CommandText, _
now, now, 0, additionalData)
End Sub
Теперь, когда пользователь запустит пакет, после выбора пункта «Мой собственный формат записи журнала» в диалоговом окне Ведение журнала в журнале появится новая запись, явно помеченная как «Пользователь::Мой собственный формат записи журнала». Новая запись в журнале содержит текст инструкции SQL, отметку времени и всю дополнительную информацию, заданную разработчиком.
|