Log de vhost por usuário

2

Eu tenho uma configuração de host virtual por usuário trabalhando com o Apache, mas gostaria que cada usuário tivesse acesso aos logs de seus hosts virtuais. Obviamente, as diretivas ErrorLog e CustomLog não aceitam a sintaxe curinga que o VirtualDocumentRoot faz, mas existe uma maneira de obter logs no diretório de cada usuário?

<VirtualHost *:80>
    ServerName *.example.com
    ServerAdmin [email protected]
    VirtualDocumentRoot /home/%2/projects/%1
    <Directory /home/*/projects/>
        Options FollowSymlinks Indexes
        IndexOptions FancyIndexing FoldersFirst
        AllowOverride All
        Order Allow,Deny
        Allow From All
        Satisfy Any
    </Directory>

    Alias /favicon.ico /var/www/default/favicon.ico
    Alias /robots.txt /var/www/default/robots.txt

    LogLevel warn
    # ErrorLog /home/%2/logs/%1.error.log
    # CustomLog /home/%2/logs/%1.access.log combined
</VirtualHost>

Resolução: Com base na boa resposta do @cjc , percebi que precisava fazer alguns scripts para resolver isso, então aqui está o que Eu inventei:

#!/bin/bash

##
# Write whatever comes through stdin to the log directory in each user's home directory.
##

# The first field in the incoming log must be the vhost name
# (%V in the Apache LogFormat).
while read vhost fields; do
        # vhost names take the form $project.$user.$host.         
        project="${vhost%%.*}" # Strip off everything after the first dotted name.
        user="${vhost#*.}" # Strip off the first dotted name.
        user="${user%%.*}" # Strip off everything but the first (remaining) dotted name.
        printf -v cmd "mkdir -p '/home/%s/log' && printf '%%s\n' '%s' >> '/home/%s/log/%s.log'" "$user" "$fields" "$user" "$project"
        sudo -u "$user" -- bash -c "$cmd"
done
    
por kojiro 23.10.2012 / 18:01

1 resposta

1

Eu não acredito que você possa fazer isso dentro do próprio Apache, mas você pode ter logs canalizados para um script que pode dividi-lo da maneira que você está tentando fazer:

Veja esta parte da documentação do Apache:

link

Então você terá uma linha como:

CustomLog "|/usr/local/bin/per-user-web-logs.pl" combined

em que /usr/local/bin/per-user-web-logs.pl é, digamos, um script Perl que será anexado ao log por usuário.

    
por 23.10.2012 / 18:43