我应该使用哪种输出方法用于记录系统?

时间:2011-06-25 07:23:40

标签: c++ networking

我正在使用epoll在linux机器上进行服务器编程。我正在使用printf()打印日志语句,但我想知道哪种输出方法使用的系统资源最少。

众所周知,服务器编程处理了大量的日志语句,所以我想知道我应该使用的最佳输出方法。可能的候选人是printf cout等。

提前致谢。

5 个答案:

答案 0 :(得分:1)

如果您使用的是C ++,则可以使用 log4cxx 进行日志记录。这是一个相当不错的框架,虽然您可能会想到简单地使用原始或自我实现的日志记录技术,从长远来看,一个体面的日志框架可以在您的项目变得越来越大时节省很多麻烦。

答案 1 :(得分:1)

printfcout都是控制台输出方法,两者都不会给你的CPU带来太大的麻烦,你可能不用担心。

但是,C ++提供了三个标准输出流 - coutcerrclog。我建议你应该使用后者,因为它就是这样,然后系统定义你的日志输出。

如果您不需要输出格式,那么使用fwrite()puts()clog.write()

将会更快(并且可能无法衡量)

答案 2 :(得分:0)

不确定性能,但这可能有效(未经测试) 我听说使用/nstd::endl更快

ofstream logfile;
logfile.open("log.txt");
log <<"log text";

答案 3 :(得分:0)

如果您的应用程序创建了大量日志并且日志记录语句正在影响性能,那么快速解决方案是创建一个具有可以通过套接字连接填充的队列的小进程。日志记录过程可以定期写入磁盘,也可以在其输入队列已满时写入磁盘。

如果额外的磁盘访问权限影响了性能,那么日志记录过程可以在与应用服务器连接到同一交换机的较小服务器上运行。

或者,如果您不希望消息传递延迟并且不介意编写稍微复杂的代码,则可以使用日志记录线程。

答案 4 :(得分:0)

为什么不使用syslog?我认为这是你问题的明显答案,除非你有一些令人信服的理由反对它。