天天看点

如何突破cronolog 2G的限制

apache采用的是2.2.3,测试是支持写2G以上日志的

cronolog最新的版本是2002年的,估计那老兄不继续维护了,采用如下方式写日志的时候是写到2150726147字节就下不下去了

<code>CustomLog "|/usr/local/sbin/cronolog /home/logs/lrc.ttplayer.com/access_log.%Y%m%d" combined  env=!dontlog</code>

然后看了网上说的什么采用如下方式重新编译cronolog

<code>CHOST="i686-pc-linux-gnu" </code>

<code>CFLAGS="-march=i686 -O3 -pipe -fomit-frame-pointer -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"</code>

<code>CXX=gcc CXXFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE" </code>

<code>./configure --prefix=/usr/local/cronolog-1.6.2</code>

然后测试还是不成

最后一个牛逼的人物出现,帮我看了看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);

    一共是两处:

<code>      </code><code>391     DEBUG((</code><code>"%s (%d): using log file \"%s\" from %s (%d) until %s (%d) (for %d secs)\n"</code><code>,</code>

<code>    </code><code>392            timestamp(time_now), time_now, pfilename,</code>

<code>    </code><code>393            timestamp(start_of_period), start_of_period,</code>

<code>    </code><code>394            timestamp(*pnext_period), *pnext_period,</code>

<code>    </code><code>395            *pnext_period - time_now));</code>

<code>    </code><code>396 </code>

<code>    </code><code>397     log_fd = </code><code>open</code><code>(pfilename, O_WRONLY|O_CREAT|O_APPEND, FILE_MODE);</code>

<code>    </code><code>398 </code>

<code>    </code><code>399 </code><code>#ifndef DONT_CREATE_SUBDIRS</code>

<code>    </code><code>400     </code><code>if</code> <code>((log_fd &lt; 0) &amp;&amp; (errno == ENOENT))</code>

<code>    </code><code>401     {</code>

<code>    </code><code>402         create_subdirs(pfilename);</code>

<code>    </code><code>403         log_fd = </code><code>open</code><code>(pfilename, O_WRONLY|O_CREAT|O_APPEND, FILE_MODE);</code>

<code>    </code><code>404     }</code>

<code>    </code><code>405 </code><code>#endif</code>

    修改为如下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以上分割应该,我这里测试通过了反正。

      本文转自ling118 51CTO博客,原文链接:http://blog.51cto.com/meiling/1976741,如需转载请自行联系原作者

继续阅读