2011-11-30 107 views
0

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

+0

你是否也想过为每个传递的变量传递第二个参数,该变量包含变量的类型? –

+0

你如何计划记录一个任意类型的变量?这组可能的类型是否有任何限制?例如,他们是否必须有'ostream&operator <<(ostream&,T)'超载? – Useless

回答

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实例。您可以通过区分不同类型的日志记录事件来让它更有趣。

0

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

它是基于模板的,有日志记录级别(不运行时发生的任何开销,如果不需要的话)和是小