cronolog最新的版本是2002年的,估计那老兄不继续维护了,采用如下方式写日志的时候是写到2150726147字节就下不下去了
CustomLog "|/usr/local/sbin/cronolog /home/logs/lrc.ttplayer.com/access_log.%Y%m%d" combined env=!dontlog
然后看了网上说的什么采用如下方式重新编译cronolog
CHOST="i686-pc-linux-gnu" CFLAGS="-march=i686 -O3 -pipe -fomit-frame-pointer -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE" CXX=gcc CXXFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE" ./configure --prefix=/usr/local/cronolog-1.6.2然后测试还是不成
最后一个牛逼的人物出现,帮我看了看cronolog的代码后提出修改如下,然后重新编译cronolog后可以突破2G了
1. 修改cronolog-1.6.2/src/cronolog.c(cronolog.c文件在编译前cronolog-1.6.2包里面的,因此需要重新编译)
2. 查找log_fd = open(pfilename, O_WRONLY|O_CREAT|O_APPEND, FILE_MODE);
一共是两处:
391 DEBUG(("%s (%d): using log file \"%s\" from %s (%d) until %s (%d) (for %d secs)\n", 392 timestamp(time_now), time_now, pfilename, 393 timestamp(start_of_period), start_of_period, 394 timestamp(*pnext_period), *pnext_period, 395 *pnext_period - time_now)); 396 397 log_fd = open(pfilename, O_WRONLY|O_CREAT|O_APPEND, FILE_MODE); 398 399 #ifndef DONT_CREATE_SUBDIRS 400 if ((log_fd < 0) && (errno == ENOENT)) 401 { 402 create_subdirs(pfilename); 403 log_fd = open(pfilename, O_WRONLY|O_CREAT|O_APPEND, FILE_MODE); 404 } 405 #endif修改为如下log_fd = open64(pfilename, O_WRONLY|O_CREAT|O_APPEND, FILE_MODE);
如果编译不通过,可能是您的gcc版本问题,可以修改成如下:
log_fd = open(pfilename, O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE, FILE_MODE);
3. 修改后重新编译,然后重启apache,可以支持2G以上分割应该,我这里测试通过了反正。