アプリケーションの動作ログはデータベース、テキストファイル、XMLファイルなどに記録できます。ここで紹介するのはXMLファイルを利用した操作ログの記録です。
XML を使用して操作ログを記録することには、次のような利点があると思います。
1. データベーススペースを占有せず、過去の操作ログを自由に削除できます。
2. DataTable は XML ファイルを簡単に読み取ることができ、DataTable を XML ファイルとして簡単に保存することもできます。
3. ログを表示するには、XML ファイルを直接開いて表示することも、DataTable に読み込んでプログラムを通じて表示することもできます。
VS2005でXMLファイルを利用して操作ログを記録する方法は以下のとおりです。
1. データセットを作成します: JobLogDataSet.xsd
これには、TraceLevel (ログ タイプ)、User (ユーザー)、DateTime (操作時間)、Module (モジュール)、Function (関数)、および Message (メッセージ) の 6 つのフィールドが含まれます。
十分でない場合は、TraceLevel (ログ タイプ) を Info、Warning、Error、Trance、Off として追加します。
2. ログタイプを作成します /// <summary>
/// ログの種類
/// </概要>
パブリック列挙型 LogType
{
/// <概要>
/// 情報
/// </概要>
情報、
/// <概要>
/// 警告する
/// </概要>
警告、
/// <概要>
/// 間違い
/// </概要>
エラー、
/// <概要>
/// 追跡
/// </概要>
トレース、
/// <概要>
/// ロギングなし
/// </概要>
オフ
}
2. ログの書き方
/// <概要>
/// ログを書き込む
/// </概要>
/// <param name="traceLevel">ログの種類 (情報、警告、エラー、トランス、オフ)</param>
/// <param name="user">ユーザー</param>
/// <param name="module">モジュール</param>
/// <param name="function">関数</param>
/// <param name="message">メッセージ</param>
public static void WriteLog(LogType logType、文字列ユーザー、文字列モジュール、文字列関数、文字列メッセージ)
{
試す
{
// Type LogType.Off はログを記録しません
if (logType == LogType.Off)
return;
JobLogDataSet.JobLogDataTable t = new JobLogDataSet.JobLogDataTable();
// 毎日 1 つのログ ファイル (.XML ファイル)、ログ ファイル名は JobLog yyyy-MM-dd.xml です。
文字列 jobLogFile = AppDomain.CurrentDomain.BaseDirectory + "JobLog " +
DateTime.Today.ToString("yyyy-MM-dd") + ".xml";
if (!File.Exists(jobLogFile))
t.WriteXml(jobLogFile);
// .XML ファイルからログを読み取ります。
t.ReadXml(jobLogFile);
//ログを追加します。
JobLogDataSet.JobLogRow r = t.NewJobLogRow();
r.TraceLevel = logType.ToString();
r.ユーザー = ユーザー;
r.Datetime = DateTime.Now;
r.モジュール = モジュール;
r.Function = 関数;
r.Message = メッセージ;
t.AddJobLogRow(r);
// ログを XML ファイルに保存します。
t.WriteXml(jobLogFile);
}
キャッチ(例外)
{}
}
3. ログの見方
/// <概要>
/// ログの読み取り
/// </概要>
/// <returns>ログを読み取るための DataTable を返します</returns>
public static JobLogDataSet.JobLogDataTable ReadLog()
{
JobLogDataSet.JobLogDataTable jobLogDataTable = new JobLogDataSet.JobLogDataTable();
試す
{
// アプリケーション フォルダーからすべてのログ ファイル JobLog*.xml を取得します
string[] jobLogFiles = Directory.GetFiles(
AppDomain.CurrentDomain.BaseDirectory, "JobLog*.xml", SearchOption.TopDirectoryOnly);
// 各ログ レコードをログ DataTable に読み込みます。
foreach (jobLogFiles 内の文字列 jobLogFile)
{
if (ファイル.存在(jobLogFile))
{
//すべてのログ ファイルを一時 DataTable に読み込みます
JobLogDataSet.JobLogDataTable t = 新しい JobLogDataSet.JobLogDataTable();
t.ReadXml(jobLogFile);
// ログ レコードをメイン ログ DataTable にインポートします
foreach (JobLogDataSet.JobLogRow r int)
jobLogDataTable.ImportRow(r);
}
}
// 読み取りログの DataTable を返します
jobLogDataTable を返します。
}
キャッチ(例外)
{
jobLogDataTable を返します。
}
}
4. ログを書き込む必要がある場合は、WriteLog メソッドを直接呼び出すだけです。