我们在Linux上有一个使用syslog机制的应用程序.花了一周时间试图弄清楚为什么这个应用程序的运行速度低于预期,我们发现如果我们删除了syslog,并且只是直接写入日志文件,性能会大大提高.
我理解为什么syslog比直接文件写入慢.但我想知道:有没有办法配置syslog来优化其性能?
您可以将syslogd(和至少rsyslog)配置为不在日志消息之后同步日志文件,方法是在配置文件中的日志文件路径前加上" - ".这样可以降低日志消息在崩溃中丢失的危险,从而加快性能.
有几种方法可以改善系统日志性能:
使用宏优化调用
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)); ... }
使用宏来过滤syslog调用的一个优点是整个调用被简化为全局变量的条件跳转,如果碰巧有DEBUG调用正在通过其他函数转换大数据集,这非常有用.
setlogmask()
setlogmask(LOG_UPTO(LOG_LEVEL))
setlogmask()将通过不记录到/ dev/log来优化调用,但程序仍将调用用作参数的函数.
使用syslog.conf进行过滤
*.err /var/log/messages
"查看syslog.conf的手册页以获取详细信息."
配置syslog以执行异步或缓冲日志记录
metalog用于缓冲日志输出并将其刷新为块.据我所知,股票syslog和syslog-ng不这样做.