C++ - 持续读取实时日志文件的最新行



我编写了以下方法,该方法实质上是从另一个线程连续写入的日志文件中读取最新行。此代码在不同的线程上运行,由计时器驱动(每 5 秒触发一次)。这很简单。下面是它的样子:

void FileManager::ReadFile()
{
    std::vector<std::string> vecLines;
    std::string line;
    m_InputStream.clear();
    while (std::getline(m_InputStream, line))
    {
        vecLines.push_back(line);
    }
    if (! vecLines.empty())
    {
        OnFileUpdate(vecLines);
    }
}

我的问题是,这个代码安全吗?基本上,我执行的算法是提前打开输入流并搜索到文件的末尾。然后,当调用此方法时,如果有任何新行要读取,则将在此处读取它们。如果有任何新行,那么此类的任何感兴趣的客户端都将收到通知(通过 OnFileUpdate() 调用)。

这需要一个在后台挂起的线程。

我要做的是创建一个处理所有错误/事件日志记录的类,如下所示。您可以将所有内容设为静态,然后您可以从多个位置访问它优点:无需额外的文件 I/O无辅助线程缺点:没有锁的多核安全

class EventLogger {
  public:
    EventLogger();
    ~EventLogger();
    void LogEvent(const std::string &event) {
      //Handle output to file here
      OnFileUpdate(event);
    }
  private: 
    void OnFileUpdate(const std::string &event) {
      //DoWorkHere
    }
}

最新更新