頭から離れて、最も簡単なオプションは、出力をリダイレクトするようにバッチスクリプトを変更することです。
dtexec.exe /file myPackage.dtsx > myPackage.log
これにより、実行ごとにログファイルが上書きされます。現在の%date%と%time%を出力ファイル名に追加することで、より洗練されたものにすることができます。
次のオプションは、呼び出しコードを変更することです。バッチスクリプトをリダイレクトしてファイルに書き込む代わりに、表示されている内容で.NETコードを読み取ることができます。最高のコードではなく、C#にありますが、会議に参加する必要があり、変更する時間がありません。次のコードは、ProcessResultsオブジェクトを調べて、標準のエラーストリームと標準のエラーストリームを引き出します。
this.processStartInfo = new ProcessStartInfo(this.dtUtilPath, parameters);
this.processStartInfo.RedirectStandardError = true;
this.processStartInfo.RedirectStandardOutput = true;
this.processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
this.processStartInfo.UseShellExecute = false;
System.Diagnostics.Process process = null;
// Perhaps it would be better to set this to 0 so that it runs to completion
int waitInMilliSeconds = 1 * 1000;
process = System.Diagnostics.Process.Start(this.processStartInfo);
System.IO.StreamReader standardError = process.StandardError;
System.IO.StreamReader standardOutput = process.StandardOutput;
process.WaitForExit(waitInMilliSeconds);
if (process.HasExited)
{
// Did it do well?
// Currently, prints results to console but based on
// exit code values can do whatever the business need is
System.Console.WriteLine(standardOutput.ReadToEnd());
System.Console.WriteLine(standardError.ReadToEnd());
System.Console.WriteLine(process.ExitCode);
}
At this point though, with either of the above solutions you are looking at parsing the above text for "whatever information you deem important." If it were me and based on what little I know so far of the problem domain, I'd skip the .NET capturing of information entirely. The batch script capture might be helpful if you like double duty but I'd go for native SSIS logging. This will require a code change on your deployed packages but I find I have the best SSIS experience by
- turning on logging,
- capturing OnError, OnTaskFailed, OnInformation, OnWarning and OnPre/PostExecute events
- SQL Serverへのログ記録(2005はパッケージ展開モードでdbo.sysdtslog90、2008、R2、および2012にログを記録します。これらのテーブルはmsdbに存在しますが、提供された接続文字列が別のカタログを指している場合、テーブルは次のようになります。そのカタログで作成され、ログがそこで発生します)