天天看點

如何突破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,如需轉載請自行聯系原作者

繼續閱讀