Windows应用程序日志记录机制

时间:2014-01-23 14:54:19

标签: c# winforms task-parallel-library

我正在开发一个Windows应用程序。我在主窗体中显示日志信息。我想从另一个类添加日志记录信息。以下是按钮点击事件的代码:

private void button1_Click(object sender, EventArgs e)
    {
        IDAL dal = new LoadCaseDAL();
        Result result = new Result();
        dal.Load(result);
        AddToLogger("test end");
    }

AddtoLogger(){ }

AddtoLogger()和按钮点击事件是主要形式。

在dal.Load(result)方法中我调用了这个函数。我想使用AddToLogger()方法将此函数中的日志信息添加到主窗体中。

protected internal void LoadLCFiles(BoltDataset.LoadCaseDataTable dt)
    {
        List<string> files = Helper.GetFiles("Text Files|*.txt");

        **//AddToLogger("Total files: " + files.Count().ToString());**

        Task loadFilesTask = Task.Factory.StartNew(() =>
        {
            foreach (string filePath in files)
            {
                LoadLCTextFile(filePath, dt);
            }
        }).ContinueWith(t =>
        {
            if (t.IsFaulted)
            {

                **//AddToLogger("Loading Failed");**
            }
            else if (t.IsCompleted)
            {                    
                **//AddToLogger("Loading Succesfull");**
            }
        });
    }

我怎样才能做到这一点?请建议。

1 个答案:

答案 0 :(得分:0)

您可以将日志记录功能放在静态类中。这样,它将在您的代码中随处可用,并且不需要对象来执行它。

public static class Tools 
{
    public static void AddToLogger(string msg) { ... }
}

现在,每次添加消息时,都要构建一个在AddToLogger()内调用的委托:

  // Delegate for new log entries
  public delegate void LogEntryAddedDelegate(string message);
  public static LogEntryAddedDelegate LogEntryAdded { get; set; }

然后在AddToLogger()函数中调用它。所以你的静态类应该是这样的:

public static class Tools
{
    // Delegate for new log entries
    public delegate void LogEntryAddedDelegate(string message);
    public static LogEntryAddedDelegate LogEntryAdded { get; set; }

    public static void AddToLogger(string msg)
    {
        // Do some stuff here

        // Call the event
        LogEntryAdded(msg);
    }
}

然后你可以在表格中挂钩你的活动:

// Registers your function to get called when a new log message is added
Tools.LogEntryAdded += new Tools.LogEntryAddedDelegate(NewLogAdded);

protected void NewLogAdded(string msg)
{
    // Update your textbox
}

然后你可以像这样添加新的日志消息:

Tools.AddToLogger("msg");

这样,每次向日志添加新消息时都会调用函数NewLogAdded()


另外,您可能需要查看日志记录框架。它们使日志记录更容易,您无需自己编写代码。

.Net的良好日志记录库是log4net