日志系统应该使用哪种输出方法
Which output method shoud I use for logging system?
我正在linux机器上使用epoll进行服务器编程。我使用printf()
打印日志语句,但我想知道哪种输出方法使用的系统资源最少。
正如你们已经知道的,服务器编程处理大量的日志语句,所以我想知道我应该使用的最佳输出方法。可能的候选者是printf
、cout
等。
提前谢谢。
printf
和cout
都是控制台输出方法,都不会给CPU带来很大麻烦,您可能什么都不用担心。
然而,C++提供了三个标准输出流——cout
、cerr
和clog
。我建议您应该使用后者,因为这就是它的用途,并且日志的输出是系统定义的。
如果您不需要输出格式,那么使用fwrite()
、puts()
或clog.write()
会稍微快一点(可能无法测量)
如果您使用C++,您可以使用log4cxx进行日志记录。这是一个相当不错的框架,尽管从长远来看,你可能会考虑简单地使用粗糙或自行实现的日志记录技术。当你的项目越来越大时,一个不错的日志记录框架可以省去很多麻烦。
不确定性能,但这可能有效(未经测试)我听说使用/n
也比std::endl
快
ofstream logfile;
logfile.open("log.txt");
log <<"log text";
如果您的应用程序创建了大量日志,并且日志记录语句影响了性能,那么一个快速的解决方案是创建一个小进程,该进程具有可以通过套接字连接填充的队列。日志记录过程可以定期或在其输入队列已满时写入磁盘。
如果额外的磁盘访问也会影响性能,那么日志记录过程可以在与应用程序服务器连接到同一交换机的较小服务器上运行。
或者,如果您不希望消息传递延迟,也不介意编写稍微复杂一点的代码,可以使用日志线程。
为什么不使用syslog?我认为这是你问题的明显答案,除非你有一些令人信服的理由反对它
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么rk4.do_step不输出C++中的初始条件
- 输出没有重复元素的动态数组(收缩数组)C++
- 如何根据单词在文本中出现的概率输出单词