GuidesApache Guide: Logging, Part 5: Advanced Logging Techniques and Tips Page 2

Apache Guide: Logging, Part 5: Advanced Logging Techniques and Tips Page 2




If you want to log to a process of some kind, you might be
better advised to look for a module that already implements
the functionality that you are looking for. Check out
http://modules.apache.org/ for a list of some of the modules
available to do all sorts of cool things with Apache.

Rotating Your Log Files

Log files get big. If you’re not careful, and if you’re logging to
somewhere like /var, you can actually fill up the partition and
bring your server to a grinding halt. Yes, I’ve done this.

The way around this is to move your log files to some other place
before they get too big. This can be accomplished a number of different
ways. Some Unix variants come with a logrotate script that handles
this for you. RedHat, for example, comes preconfigured to rotate your
logs for you every few days, based on either their size or their
age.

If you want to do this yourself, you can use a Perl module (freely
available from CPAN) called Logfile::Rotate. The following code, run
periodically (perhaps once a week?) by cron, will rotate out your logfile,
keeping five previous log files at any given time. Each backup log file
will be gzipped to conserve space.

     use Logfile::Rotate;
      = new Logfile::Rotate(
          File => '/usr/local/apache/logs/access_log',
          Count => 5,
          Gzip => '/bin/gzip',
          Signal => sub {
               '/usr/local/apache/bin/apachectl restart';
               }
          );

This does not seem like much. The Perl module takes care of all the
details. You'll end up with files called things like
access_log.1.gz, access_log.2.gz, and so on. Each file will
get bumped up one number each time, and the file that used to be
access_log.5.gz will be deleted each time.

This keeps you from running out of space on your log drive, and keeps
as much of an archive as you like.

Logging for Multiple Virtual
Hosts

I had several people write to me asking about how to handle
logging when you have more than one virtual host on the same machine. I assume
that they are running all of their logs into one log file, and are
then attempting to split that log file back out into its component
parts in order to get meaningful reports per host.

The solution to this problem is not to log to one log file in the
first place. I know that there are utilities out there that will
take a mixed log file, and, based on your virtual host configurations,
figure out what requests were for which virtual host, and generate
reports appropriately. This all seems to be too much work, as far
as I can tell.

In each of your VirtualHost sections, simply specify a log file
for that host. You can then handle each log file separately when it
comes time to run reports.

There are some concerns with available file handles. That is, if you
are running hundreds of virtual hosts, and have a log file per host,
you may encounter a situation where you run out of available file
handles. This can cause system instability and can even cause your
system to halt. However, this is primarily a concern on servers that
are hosting a very large number of virtual hosts.

For those that asked this question, please let me know if I'm
completely missing the point of your question.

Summary

In the last several weeks, we've talked about various aspects
of logging with Apache. You should now be equipped to log whatever
information that you're interested in, and get all sorts of useful
statistics out of those log files.

Latest Posts

Related Stories