一 apache的日志分类
apache的日志可分为三种: 运行时错误日志,访问日志,其他相关插件或模块的运行日志
1.1 apache运行时错误日志:
该日志由指令 ErrorLog 控制, 一般记录apache在启动过程或者运行时的错误
1.2 apache访问日志:
该日志由指令 CustomLog 控制, 一般用于记录该服务器的被访问记录
1.3 其他模块或插件的运行日志:
常见的一些服务器扩展功能的插件如集成tomcat于apache中的mod_jk模块的日志
二. apache中与日志相关的一些应用:
2.1 自定义格式的日志
2.1.1用LogFormat 指令自定义一个名为combined的日志格式
LogFormat "%h %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combined
LogLevel warn
CustomLog logs/access.log combined
2.2 为在同一apache服务器上的多个项目配置各自的出错日志和访问日志
1. <VirtualHost 10.0.0.2>
2. DocumentRoot "/home/sites/domain1/html/"
3. ServerName domain1.com
4. ErrorLog /home/sites/domain1/logs/error.log
5. CustomLog /home/sites/domain1/logs/web.log
6. </VirtualHost>
7.
8. <VirtualHost 10.0.0.3>
9. DocumentRoot "/home/sites/domain2/html/"
10. ServerName domain2.com
11. ErrorLog /home/sites/domain2/logs/error.log
12. CustomLog /home/sites/domain2/logs/web.log
13. </VirtualHost>
14.
15. <VirtualHost 10.0.0.4>
16. DocumentRoot "/home/sites/domain3/html/"
17. ServerName domain3.com
18. ErrorLog /home/sites/domain3/logs/error.log
19. CustomLog /home/sites/domain3/logs/web.log
20. </VirtualHost>
2.3 如何合并实现负载均衡后的多个log文件
三关于apache日志的高级应用:
3.1把日志记录写入到指定程序
日志记录并非只能写入到文件,它还可以写入到指定的进程。当我们想要把日志信息写入数据库、或者是某些能够实时显示网站流量统计信息的程序时,这一点是非常有用的。
使用TransferLog或者CustomLog指令,我们能够指定“|”,后面再加上接收日志信息的程序名字。例如:
CustomLog |/usr/bin/apachelog.pl common
其中/usr/bin/apachelog.pl是一个程序,这个程序知道如何处理Apache日志文件的记录。事实上,这个程序非常简单,比如它可以是一个按照某种方式处理日志记录的Perl程序,或者是一个将日志记录写入数据库的程序。
在采用这种记录日志数据的方法时,安全问题是最必须关注的问题。日志文件是以启动服务器的用户所具有的权限打开的,通常是root。
如果你要把日志记录写入到某个程序,建议先找找是否有现成的具备自己想要功能的模块。请访问http://modules.apache.org/,该网站收集了许多面向Apache完成各类实际任务的模块。
3.2 轮换日志
日志文件会越来越大,如果不小心把日志文件放到了/var之类位置,日志文件可能写满分区,从而导致服务器被迫停止运行。这种事情确实曾经发生过。
如果要自己实现这方面的功能,我们可以使用称为Logfile::Rotate的Perl模块(可从CPAN下载)。下面的代码就具有这种功能,它由cron按照一定的间隔周期(比如一星期)运行,为了节省空间。每一个备份的日志文件都经过压缩。
3.3 選擇性紀錄日誌 http://httpd.apache.org/docs/2.0/logs.html
我們可以利用environment variables實現選擇性紀錄日誌. 首先用SetEnvIf設置一個environment variables, 然後在 CustomLog
指令中利用env=
1. # Mark requests from the loop-back interface
2. SetEnvIf Remote_Addr "127/.0/.0/.1" dontlog
3. # Mark requests for the robots.txt file
4. SetEnvIf Request_URI "^/robots/.txt$" dontlog
5. # Log what remains
6. CustomLog logs/access_log common env=!dontlog
我們可以把英文用戶和中文用戶的訪問紀錄寫進不同的日誌文件
1. SetEnvIf Accept-Language "en"
2. CustomLog logs/english_log common env=english
3. CustomLog logs/non_english_log common env=!english