日志系统应该使用哪种输出方法

Which output method shoud I use for logging system?

本文关键字:输出 输出方 方法 系统 日志      更新时间:2023-10-16

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

正如你们已经知道的,服务器编程处理大量的日志语句,所以我想知道我应该使用的最佳输出方法。可能的候选者是printfcout等。

提前谢谢。

printfcout都是控制台输出方法,都不会给CPU带来很大麻烦,您可能什么都不用担心。

然而,C++提供了三个标准输出流——coutcerrclog。我建议您应该使用后者,因为这就是它的用途,并且日志的输出是系统定义的。

如果您不需要输出格式,那么使用fwrite()puts()clog.write() 会稍微快一点(可能无法测量)

如果您使用C++,您可以使用log4cxx进行日志记录。这是一个相当不错的框架,尽管从长远来看,你可能会考虑简单地使用粗糙或自行实现的日志记录技术。当你的项目越来越大时,一个不错的日志记录框架可以省去很多麻烦。

不确定性能,但这可能有效(未经测试)我听说使用/n也比std::endl

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

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

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

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

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