记录电线?

时间:2008-11-27 18:05:04

标签: c++ linux logging

我们有这样的情况,我们将大量日志文件写入主机,增加主机上的i / o。是否有任何良好的开源日志记录通过电线解决方案。

应用程序语言是Red Hat Linux 3上的C ++。

6 个答案:

答案 0 :(得分:3)

一个非常简单的日志记录选项是使用syslog并依赖(在正确配置之后)syslog守护程序将其转发到远程服务器。

看看:

openlog()

syslog()

closelog()

syslog.conf

答案 1 :(得分:1)

有一些日志库可以帮助您。取决于您的应用程序语言。但如果i / o是一个问题,那么网络带宽可能是一个更大的问题。

答案 2 :(得分:1)

第一组问题:

  • 您是否需要所有这些日志文件?
  • 一直?
  • 您可以控制记录发生的次数吗?
  • 为什么不呢?

第二组问题:

  • 为什么日志写入操作会变慢?
  • 您使用的是不合适的操作(例如,O_SYNC还是POSIX上的相关选项)?
  • 您有多少个磁盘驱动器?
  • 您可以通过在不同的驱动器上使用不同的日志文件来获得(或者至少将日志文件放在与其他文件存储的不同驱动器上)?

正如@igalse所说,有可用的日志库。对于C ++,您应该查看Boost的可用内容,但毫无疑问也有其他来源。

答案 3 :(得分:1)

对于C ++,Boost不包含用于记录的库。但是你可以使用John Torjo编写的最先进的候选人here

它允许过滤一些日志记录(如果日志记录非常重要,它可能需要它,它会成为性能问题)并设置不同的目标,如流。

答案 4 :(得分:0)

如果主机上的I / O受到不必要的影响,那么在我看来,你要么:

  • 进行FAR太多日志记录 - 充分记录以便持续接近IO写入速度可能太多了 - 因为即使是最适度的硬件也可以轻松地每秒几兆字节而没有问题
  • 执行太多日志刷新 - 这更有可能。默认情况下,Syslogd会刷新日志(对于日志密集型应用程序而言太多) - 这样可以在发生崩溃时保持日志文件的持久性 - 但会产生大量的IO。可以基于每个文件重新配置Syslogd(参见其手册页),不要经常刷新文件。

如果遇到同样的问题,登录到网络服务器并不能解决这些问题 - 实际上,如果有多台主机登录到同一台服务器,它会使问题更糟。

答案 5 :(得分:-1)

应用程序语言是Red Hat Linux 3上的C ++。