如何使信息记录更容易?

时间:2013-01-31 16:30:28

标签: c++ logging

我正在开发一个GUI应用程序。我有一个主窗口。主窗口有一个信息窗口,用于记录当前操作的一些基本信息,例如正在做什么以及需要多长时间。代码如下:

class InfoWindow
{
public:
    InfoWindow();

    void Record(const string& info);
};

class MainWindow
{
public:
   void OperationInMainWindow()
   {
        // Perform the operation.
        ...

        // Record the operation information (okay here since m_infoWindow is
        // accessible.
        m_infoWindow.Record(...);
   }

private:
    InfoWindow m_infoWindow;

    // Many other windows. Other windows have also operations whose information
    // need to record. And getting worse, the other windows have children
    // windows who have to record operation information in the main window's
    // info window.
    OtherWindow1 m_otherWindow1; //  
    OtherWindow2 m_otherWindow2;
    ...        
};

如何使信息记录更容易?我尝试在信息窗口中使用单例,但不太满意,因为信息窗口的生命周期应由主窗口控制。非常感谢!!!

1 个答案:

答案 0 :(得分:1)

您所描述的是一种日志记录形式,日志记录通常使用单个对象完成。 (这是单身人士极少数合理使用之一。)

您可以使用单个日志记录对象将消息定向到当前的InfoWindow。因此,您将创建日志记录对象,默认情况下,它只会抛出消息。创建InfoWindow时,它会“记录”自己的日志对象。从那时起,日志记录对象将消息定向到InfoWindow。当InfoWindow被销毁时,它会取消注册日志对象。

关于这一点的好处是你可以使用单例记录对象将字符串复制到日志文件,控制台窗口或其他任何东西。

您可以通过使用发布者/订阅者模型获得更加通用和分离,但这可能比您目前所需和需要的更精细。