データ フロー コンポーネントのログ エントリの記録と定義
カスタム データ フロー コンポーネントは、IDTSComponentMetaData100 インターフェイスの PostLogMessage メソッドを使用して既存のログ エントリにメッセージを送信できます。 FireInformation メソッドまたは IDTSComponentMetaData100 インターフェイスの同様のメソッドを使用して、ユーザーに情報を提供することもできます。 ただし、この方法では追加のイベントの発生と処理によるオーバーヘッドが発生し、ユーザーにとって意味のあるメッセージの詳細情報メッセージをユーザーが取捨選択する必要があります。 次に示す方法でカスタム ログ エントリを使用すると、明確にラベル付けされたカスタム ログ情報をコンポーネントのユーザーに提供できます。
カスタム ログ エントリの登録と使用
カスタム ログ エントリの登録
コンポーネントで使用するためにカスタム ログ エントリを登録するには、PipelineComponent 基本クラスの RegisterLogEntries メソッドを上書きします。 次の例では、カスタム ログ エントリを登録し、名前と説明を入力します。
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 : 完了した作業量に比例する回数だけイベントのログが記録されます。
上の例では、コンポーネントが実行ごとに 1 回エントリのログを記録するため、DTSLEF_CONSISTENT を使用します。
カスタム ログ エントリを登録し、カスタム コンポーネントのインスタンスをデータ フローのデザイナー画面に追加したら、デザイナーの [ログ記録] ダイアログ ボックスの使用可能なログ エントリの一覧に、"My Custom Component Log Entry" という名前の新しいログ エントリが表示されます。
カスタム ログ エントリへのログ記録
カスタム ログ エントリを登録したら、コンポーネントがカスタム メッセージのログを記録できるようになります。 次の例では、コンポーネントによって使用される SQL ステートメントのテキストを含む PreExecute メソッドの実行時にカスタム ログ エントリを記述します。
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
ユーザーがパッケージを実行し、[ログ記録] ダイアログ ボックスで [My Custom Component Log Entry] を選択すると、「User::My Custom Component Log Entry」というラベルが付けられたエントリがログに含まれます。この新しいログ エントリには、SQL ステートメントのテキスト、タイムスタンプ、および開発者によってログが記録された追加のデータが含まれます。
|