关键优化是将行首正则匹配函数从boost::regex_match改为boost::regex_search。原来的regex_match会对整行日志内容进行全量匹配(包括行首正则后面.*匹配的所有字符),当日志行很长时,匹配耗时会随日志长度线性增长。而regex_search配合boost::match_continuous标志只匹配日志的前缀部分,耗时基本恒定,不受日志长度影响。同时对用户配置的正则进行自动处理:去除尾部的.*并在前面添加^前缀。实测优化后采集速率从90MB/s提升至633MB/s,提升约7倍。




