Best way to rotate Apache log files

100,218

Solution 1

Have you looked at logrotate - this is probably the simplest, most widely available and well understood method of achieving this. It is highly configurable and will probably do 90% of what you need.

Solution 2

I'm a big fan of Cronolog. Just install and pipe your logs through it. For daily log rotation, something like this would work:

ErrorLog  "|/usr/bin/cronolog /path/to/logs/%Y-%m-%d/error.log"
CustomLog "|/usr/bin/cronolog /path/to/logs/%Y-%m-%d/access.log" combined

Pretty handy, and once installed, easier (in my experience) than logrotate.

Solution 3

The actual command for Windows, which is quite difficult to find online is:

CustomLog '|" "*Apache-Path/bin/rotatelogs.exe" 
    "**Apache-Path*/logs/backup/internet_access_%d-%m-%y.log" 86400' combined

Where the "internet_access" bit is the name you choose for your files, the 86400 is the number of seconds in one day. You need to change the Apache-Path to the relevant directory you've installed Apache to.

Solution 4

logrotate

logrotate is probably the best solution. Use the file /etc/logrotate.conf to change the settings for all your logs. You van change weekly to daily so the logs are rotated every day. Also, you might want to add compress so the archives are compressed. If you don't care about the old logs, you can set rotate rotate 4 to something lower.

Solution 5

CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common

This configuration will rotate the logfile whenever it reaches a size of 5 megabytes.

ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M" 

This Would Be Best Way to Redirect Apache logs. No need to compile mod with httpd.

Share:
100,218
Scott Gottreu
Author by

Scott Gottreu

Contract Web Developer for Verizon Wireless

Updated on July 05, 2022

Comments

  • Scott Gottreu
    Scott Gottreu almost 2 years

    I've got an Apache server that has one access log file that is topping 600MB. This makes it really hard to search the file or parse it.
    What software or modules for Apache are available that will make a daily copy of my access file to make it more manageable?

  • Bobby Jack
    Bobby Jack over 15 years
    I'm intrigued - what are the differences between this and the apache-supplied 'rotatelogs'? And why doesn't the apache manual mention logrotate (yet it does refer to cronolog)?
  • ruslanys
    ruslanys over 15 years
    Just an assumption: this could be because logrotate is not available on all system Apache is running. I have only used it on Linux installations, where it is used to rollover all of the system logs, and of course Apache's log files.
  • Pedro
    Pedro about 13 years
    Instead of dealing with trying to wrap quotes around the paths, I ended up shortening them, such as "c:/Progra~1/..." Also, it took awhile, but I eventually realized that I needed forward slashes in the paths.
  • s106mo
    s106mo almost 13 years
    Don't use backslashes in the path, it won't work! Alternatively, you can use mod_log_rotate. Using this mod prevents also cmd.exe issues under Windows.
  • Ryall
    Ryall almost 12 years
    A usage example like Brian's answer would be really helpful. Thanks.
  • maxgalbu
    maxgalbu over 10 years
    when I used cronolog i encountered some issues when the log file reached 2GB of data. At that point there was no more logging and apache stalled until i removed/renamed the file. Since then I'm using logrotate and all is fine :)
  • Tobia
    Tobia over 9 years
    Is there some rotatelogs option to delete old files or to overwrite them?
  • user292049
    user292049 over 9 years
    I did had some issues in Apache2.4 (Windows 8) for implementing log rotation. But fixed as below. In httpd.conf file add the following line ServerRoot "c:/Apache24" # Apache installation path #CustomLog "|bin/rotatelogs logs/access.log.%Y-%m-%d 86400" common # This above does not work, but when added .exe, it worked. CustomLog "|bin/rotatelogs.exe logs/access.log.%Y-%m-%d 86400" common
  • MarkHu
    MarkHu almost 9 years
    The downside to logrotate is that the logfile will continue to get written to the old filename until the process restarts.
  • MarkHu
    MarkHu almost 9 years
    Note that the -n 4 "circular logs" option might not work as expected unless you add the -L basename option.
  • Dharani Dharan
    Dharani Dharan over 8 years
    @alimack Can you give exact command for configuration rotatelog because am getting unable to open log error while i trying to start apache server.
  • User
    User almost 8 years
    Unable to open file sounds like permissions - create a blank file with the correct name and check the write permissions.
  • Abbas
    Abbas about 6 years
    This is good enough to me ErrorLog '| "bin/rotatelogs.exe" "logs/error_%Y%m%d-%H%M%S.log" 10M'
  • surya
    surya over 5 years
    @Tobia did you find a solution to delete old files ?
  • Tobia
    Tobia over 5 years
    Not with date log names, I had to switch to indexed log names (rotatelogs.exe -n 3 filepath 1M)