Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Oct 2008 23:26:52 -0700
From:      Jeremy Chadwick <koitsu@FreeBSD.org>
To:        Grant Peel <gpeel@thenetnow.com>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Logrotate
Message-ID:  <20081002062652.GA40660@icarus.home.lan>
In-Reply-To: <668A2B1DDBEC40BCAC6A82589B5D1159@GRANT>
References:  <668A2B1DDBEC40BCAC6A82589B5D1159@GRANT>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Oct 01, 2008 at 07:52:48PM -0400, Grant Peel wrote:
> I have recently started using logrotate to rotate all the logs in the 
> users home directories. These are all apache logs files.
>
> /home/domain.com/logsaccess_log
> /home/domain.com/logsaccess_log.0.gz
> /home/domain.com/logsaccess_log.1.gz
> /home/domain.com/logsaccess_log.2.gz
>
> I have a problem though. Some of my domains have softlinks pointing to 
> them, this causes the logs to be rotated 2 or more times (i.e. 1 time for 
> the 'real' directory, and 1 time each for each softlink pointing to 
> them).
>
> Example
>
> /home/domain.com/logs/
> domain2.com -> domain.com
> domain3.com -> domain.com
>
> will result in the 'access_log' being rotated 3 times in one run, causing 
> my log dirs to look like this:
>
> -rw-r--r--   1 root      holt   160 Oct  1 05:44 access_log
> -rw-r--r--   1 root      holt   446 Oct  1 05:44 error_log
> -rw-r--r--   1 root      holt    20 Oct  1 03:46 access_log.1.gz
> -rw-r--r--   1 root      holt    20 Oct  1 03:46 access_log.2.gz
> -rw-r--r--   1 root      holt    20 Oct  1 03:46 access_log.3.gz
> -rw-r--r--   1 root      holt    20 Oct  1 03:46 access_log.4.gz
> -rw-r--r--   1 root      holt    20 Oct  1 03:46 access_log.5.gz
> -rw-r--r--   1 root      holt    20 Oct  1 03:46 access_log.6.gz
> -rw-r--r--   1 root      holt   224 Oct  1 03:46 access_log.7.gz
> -rw-r--r--   1 root      holt    20 Sep 30 03:46 access_log.8.gz
> -rw-r--r--   1 root      holt    20 Sep 30 03:46 access_log.9.gz
>
> Here is this appropriate part of my logrotate.conf
>
> # logrotate.conf
>
> compress
>
> ...
>
> /home/*/logs/access_log {
>        missingok
>        rotate 14
>        daily
>        create 644 root
>        sharedscripts
>                postrotate
>                        /usr/local/sbin/apachectl restart
>                endscript
>                }
>
> # End of logrotate.conf
>
>
> Question, is there a way to stop this from happening?

The problem is that you're using a wildcard in your log list:

/home/*/logs/access_log is going to expand to:

/home/domain.com/logs/access_log
/home/domain2.com/logs/access_log
/home/domain3.com/logs/access_log
/home/...anythingelse.../logs/access_log

So the software will do exactly what you asked for.

What we use on our production webservers:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog "/var/log/httpd-access.log" combined

This puts the VirtualHost name being accessed as the first field
in the logfile.  Every night, via a cronjob, we split the file
up per VirtualHost using a script that comes with Apache called
split-logfile.  E.g.:

cd where_you_want_the_logs
/usr/local/sbin/split-logfile < /var/log/httpd-access.log

This will make a separate logfile per virtual host name, and you
can do whatever you want from there on out.

There's a performance advantage here as well: one logfile means only
one file descriptor open, which is Good(tm).  Multiple logfiles opened
under Apache does not scale well.

-- 
| Jeremy Chadwick                                jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20081002062652.GA40660>