结合我开发的项目而言,选择用xml方式在记录button和combox的操作日志,可以不占用数据库空间,调用简单;
在vs2008中,第一步就是要建立数据集:JobLogDataSet.xsd,在项目解决方案下右键-添加-新建项-数据集
然后在打开的窗口中建立JobLog表,添加自己需要的字段,下图中TraceLevel是指日志的类型,User是用户,Datetime是操作时间,Module是操作的模块,Function是操作控件的功能,Message是消息,如果需要记录的还要多,可以自行添加字段不过要注意的是在类型上面要注意字段的类型是string还是datetime等等如下例就是datetime的数据类型就是datetime,其他的都是string类型.
public enum LogType
{
//信息,警告,错误,跟踪,不记录日志
Info, Warning, Error, Trace, Off
}
然后就是些操作日志的方法了:
/// <summary>
/// 写Combox的的SelectChangs事件日志
/// </summary>
/// <param name="traceLevel">日志类型(Info,Warning,Error,Trance,Off)</param>
/// <param name="user">用户</param>
/// <param name="module">模块</param>
/// <param name="function">功能</param>
/// <param name="message">消息</param>
public static void WriteLogType(LogType logType, string user, string module, string function, string message)
{
try
{
// 类型为 LogType.Off 的 不记录日志
if (logType == LogType.Off)
return;
JobLogDataSet.JobLogDataTable t = new JobLogDataSet.JobLogDataTable();
string jobLogFile = AppDomain.CurrentDomain.BaseDirectory + "JobLog" + "XXXX" + ".xml";
if (!File.Exists(jobLogFile))
t.WriteXml(jobLogFile);
// 从 .XML 文件中读取日志
t.ReadXml(jobLogFile);
//如果xml里面有记录,清空
if (t.Rows.Count > 0)
{
t.Rows.Clear();
}
// 重新添加日志
JobLogDataSet.JobLogRow r = t.NewJobLogRow();
r.TraceLevel = logType.ToString();
r.User = user;
r.Datetime = DateTime.Now;
r.Module = module;
r.Function = function;
r.Message = message;
t.AddJobLogRow(r);
// 保存到日志到 XML 文件
t.WriteXml(jobLogFile);
}
catch (Exception)
{ }
}
下面是读日志的方法:
/// <summary>
/// 读XXXX日志
/// </summary>
/// <returns>返回读取日志的DataTable</returns>
public static JobLogDataSet.JobLogDataTable ReadLog()
{
JobLogDataSet.JobLogDataTable jobLogDataTable = new JobLogDataSet.JobLogDataTable();
try
{
//从应用程序文件夹中,获取XXXX日志文件
string jobLogFile = AppDomain.CurrentDomain.BaseDirectory + "JobLogXXXX.xml";
if (File.Exists(jobLogFile))
{
// 读取染色选择日志文件到临时 DataTable
JobLogDataSet.JobLogDataTable t = new JobLogDataSet.JobLogDataTable();
t.ReadXml(jobLogFile);
// 导入日志记录到主日志 DataTable
foreach (JobLogDataSet.JobLogRow r in t)
jobLogDataTable.ImportRow(r);
}
return jobLogDataTable;
}
catch (Exception)
{
return jobLogDataTable;
}
}
如果项目有需要不用留日志则可以添加一个删除方法,在程序退出后删除所有日志XML.
//每次程序退出都清空所生成的记录日志
public static void Delete()
{
try
{
string[] XmlFiles =Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory,"JobLog*.xml",SearchOption.TopDirectoryOnly);
foreach (string jobXmlFile in XmlFiles)
{
if (File.Exists(jobXmlFile))
File.Delete(jobXmlFile);
}
}
catch (Exception)
{ }
}
最后直接在需要记录操作日志的地方调用方法就行!