【问题标题】:Implement Minimal logging program in c++用 C++ 实现最小日志程序
【发布时间】:2011-11-30 17:29:52
【问题描述】:

我正在为数据库引擎开发一个基于磁盘的树,我喜欢为我的程序维护一个日志文件。我基本上需要日志程序中的两种功能。它必须允许我将消息记录到日志文件中,并且还必须将我作为参数传递的任何变量写入日志文件。我只需要这两个功能。第一个实现起来相当简单,但我发现第二个很难实现。我想将任意数量的任意类型的参数传递给日志程序以将其写入日志文件。我尝试使用可变参数函数来实现第二个,但问题是我们必须知道正在传递的变量的类型。我确信必须有某种方法可以做到这一点。有人能告诉我吗?

【问题讨论】:

  • 您是否考虑过为每个传递的变量传递第二个参数,该参数保存变量的类型?
  • 您打算如何记录任意类型的变量?对可能类型的集合是否有任何限制?例如,他们必须有一个ostream& operator<<(ostream&, T) 重载吗?

标签: c++


【解决方案1】:

log4C++ 提供您正在寻找的功能。

如果这对你来说有点太重了,你可以使用模板做类似的事情。比如:

class log
{
private:
  std::ostream& stream;

public:
  log(std::ostream& src) : stream(src) {}

...

  std::ostream& getStream() { return stream; }
}

template <typename T> log& operator<<(log&, const T& val)
{
  log.getStream() << val;
  return log;
}

这里的log::stream 是您为输出到文件、控制台或其他任何东西而定义的一些std::ostream 实例。您可以通过区分不同类型的日志记录事件来使其更有趣。

【讨论】:

    【解决方案2】:

    看看 Dob 博士文章中这个简单日志系统的实现:http://drdobbs.com/cpp/201804215

    它基于模板,具有日志记录级别(如果不需要,在运行时不会产生任何开销)并且很小

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 2012-01-06
      相关资源
      最近更新 更多