我在Apache 2.2上使用mod_userdir为多个用户提供访问Web服务器的权限(用于他们的测试和其他东西)。
我想让我的用户访问apache日志(以便他们可以调试他们的脚本)但是记录条目(ErrorLog
和CustomLog
: error.log 和 access.log )组合在一起(无论“用户”目录是什么)。
有没有办法将日志分成多个文件(取决于用户)。
Apache版本:2.2.16
“ / etc / apache2 / sites-enabled / 000-default ”配置文件:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
“ /etc/apache2/mods-enabled/userdir.conf ”配置文件:
<IfModule mod_userdir.c>
UserDir /home/*/public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Options
Options MultiViews Indexes IncludesNoExec
IndexOptions FoldersFirst FancyIndexing IgnoreCase
php_admin_value open_basedir "..:/usr/share/php/"
</Directory>
ErrorLog /tmp/apache2-userdir-error.log
LogLevel warn
CustomLog /tmp/apache2-userdir-access.log
</IfModule>
答案 0 :(得分:3)
嗯......我99%肯定你可以在“SetEnvIf”上使用正则表达式捕获组来做到这一点......
我做了类似的事情 - 我使用以下内容将用户日志(所有这些)从网站日志中分离出来:
SetEnvIf Request_URI "^/~.*$" useraccess=1
CustomLog /var/www/logs/access.log combined env=!useraccess
CustomLog /var/www/logs/user-access.log combined env=useraccess
你应该可以这样做:
SetEnvIf Request_URI "^/~([^/]+)/.*$" username=$1
CustomLog /var/www/logs/${username}.log combined
答案 1 :(得分:1)
根据Apache CustomLog Directive manual (mod_log_config module),可以指定程序而不是文件,该程序将接收登录到STDIN。
然后,可以轻松解析该日志消息,以检查消息所针对的路径(即哪个用户),并将其写入特定文件(例如,用户名命名)。