最近写了一个合并两个日志文件为一个文件的小程序,日志的记录是通用日志记录。具体是Apache的日志记录格式。
两个日志文件的时间排序基本上是按照时间从小到大的顺序排列的。但也有个别条的记录不是这个顺序。如下:
125.90.58.136 - - [22/Apr/2008:00:00:01 +0800] "GET /images/rt.gif HTTP/1.1" 200 2559
220.181.19.175 - - [21/Apr/2008:23:59:24 +0800] "GET /quality/air_s.php3?offset=125240&city=&date_f=2000-06-05&date_t=2007-01-03&affected_rows=146843 HTTP/1.1" 200 995400
125.90.58.136 - - [22/Apr/2008:00:00:01 +0800] "GET /images/bbk.gif HTTP/1.1" 200 274
时间小的排在了后面了。现在要把两个日志文件合并在一起,然后按时间大小由小到大去排序。
我的设计思路是这样的:从每个日志文件中取出一条记录,然后提取出这条记录的时间,比较这两条记录的时间,将时间小的写入新文件,然后将另外未写入文件的记录保存,和取出的另外一条比较,然后把小的再写入文件。如此往复的比较写入。当遇到将要写入的一条记录比上次已经写入的一条记录小的情况时就把将要写入的这条记录抛弃掉。
现在我的程序也可以按照这个思路大致的执行。但就是不能正常的结束。两个日志文件一个109M,另一个146M但我合并后的文件只有140M。我的程序肯定是没执行完。但现在我自己也找不到问题出在了哪里?请对C++熟悉的朋友帮我看看啊!
程序的源码在附件里,有兴趣的朋友可以看看啊。