我正在为数据库引擎开发基于磁盘的树,我喜欢为我的程序维护一个日志文件。我基本上需要日志程序中的两种功能。它必须允许我将消息记录到日志文件中,并且还必须写入我将其作为参数传递到日志文件中的任何变量。我只需要这两个功能。第一个是相当简单的实现,但我发现很难实现第二个。我想将任意类型的任意数量的参数传递给日志程序,以将其写入日志文件。我尝试使用变量参数函数实现第二个,但问题是我们必须知道传递的变量的类型。我相信必须有某种方法来做到这一点。有谁可以启发我这个?
答案 0 :(得分: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
实例。您可以通过区分不同类型的日志记录事件来使它更有趣。
答案 1 :(得分:0)
从Dr. Dobs文章http://drdobbs.com/cpp/201804215
看一下这个简单日志系统的实现它是基于模板的,具有日志记录级别(如果不需要,在运行时不会产生任何开销)并且很小