系统日志性能可以改进吗?

Kri*_*son 10 unix linux logging syslog

我们在Linux上有一个使用syslog机制的应用程序.花了一周时间试图弄清楚为什么这个应用程序的运行速度低于预期,我们发现如果我们删除了syslog,并且只是直接写入日志文件,性能会大大提高.

我理解为什么syslog比直接文件写入慢.但我想知道:有没有办法配置syslog来优化其性能?

Tor*_*rek 20

您可以将syslogd(和至少rsyslog)配置为不在日志消息之后同步日志文件,方法是在配置文件中的日志文件路径前加上" - ".这样可以降低日志消息在崩溃中丢失的危险,从而加快性能.


Phi*_*lan 6

有几种方法可以改善系统日志性能:

  • 使用宏优化调用

     int LogMask = LOG_UPTO(LOG_WARNING);
     #define syslog(a, ...) if ((a) & LogMask ) syslog((a), __VA_ARGS__)
    
     int main(int argc, char **argv)
     {
              LogMask = setlogmask(LOG_UPTO(LOG_WARNING));
              ...
     }
    
    Run Code Online (Sandbox Code Playgroud)

    使用宏来过滤syslog调用的一个优点是整个调用被简化为全局变量的条件跳转,如果碰巧有DEBUG调用正在通过其他函数转换大数据集,这非常有用.

  • setlogmask()

    setlogmask(LOG_UPTO(LOG_LEVEL))
    
    Run Code Online (Sandbox Code Playgroud)

    setlogmask()将通过不记录到/ dev/log来优化调用,但程序仍将调用用作参数的函数.

  • 使用syslog.conf进行过滤

     *.err                                               /var/log/messages
    
    Run Code Online (Sandbox Code Playgroud)

    "查看syslog.conf的手册页以获取详细信息."

  • 配置syslog以执行异步或缓冲日志记录

    metalog用于缓冲日志输出并将其刷新为块.据我所知,股票syslog和syslog-ng不这样做.