一 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