`

apache 和 tomcat 的日志管理

 
阅读更多

Apache配置文件中,需要关心的和日志相关配置有两个:
$ CustomLog /www/logs/access_log common
$ ErrorLog /www/logs/error_log
CustomLog用来指示Apache的访问日志存放的位置(这里保存在/www/logs/access_log中)和格式(这里为common);ErrorLog用来指示Apache错误信息日志存放的位置。
对于不配置虚拟主机的服务器来说,只需直接在httpd.conf中查找CustomLog配置进行修改即可。

接下来遇到的一个问题就是日志文件的轮循。因为日志一直在增大,如果不进行处理那么日志文件越来越大,就会影响Web服务器运行效率、速率,还可能耗尽服务器硬盘空间,导致服务器无法正常运行。另外,如果单个日志文件大于操作系统单文件尺寸的的限制,从而会进一步影响Web服务的运行。而且,日志文件如果不进行轮循,也不便于日志统计分析程序的运行。因为日志统计分析都是以天为单位进行统计分析的,跨越很长时间日志会使得统计分析程序运行特别慢。因此这里就需要对Web服务器日志文件每天进行轮循。
Web服务器日志轮循
Web服务器日志轮循比较好的方式有三种:
第一种方法是利用Linux系统自身的日志文件轮循机制logrotate。
第二种方法是利用Apache自带的日志轮循程序rotatelogs。
第三种是使用在Apache的FAQ中推荐发展已经比较成熟的一个日志轮循工具 cronolog。
对于大型的Web服务来说,往往使用实用负载均衡技术提高Web站点服务能力,这样后台有多个服务器提供Web服务,大大方便了服务的分布规划和扩展性。如果有多个服务器的分布需要对日志进行合并,统一进行统计分析。因此为了保证统计的精确性,需要严格按照每天的时段来自动生成日志。
用rotatelogs实现日志轮循
Apache 提供了不把日志直接写入文件,而是通过管道发送给另外一个程序的能力。这样就大大加强了对日志进行处理的能力。这个通过管道得到的程序可以是任何程序,如日志分析、压缩日志等。要实现将日志写到管道的操作,只需要将配置中日志文件部分的内容替换为“|程序名”即可,例如:
# compressed logs
$ CustomLog "|/usr/bin/gzip -c >> /var/log/access_log.gz" common
这样就可以使用Apache自带的轮循工具rotatelogs来对日志文件进行轮循。rotatelogs基本是按时间或大小来控制日志的。
$ CustomLog "|/www/bin/rotatelogs /www/logs/secfocus/access_log 86400" common
上面的示例中,Apache访问日志被发送给程序rotatelogs;rotatelogs将日志写入 /www/logs/secfocus/access_log,并每隔86400秒(1天)对日志进行一次轮循。轮循以后的文件名为 /www/logs/secfocus/access_log.nnn,这里nnn是开始记录日志的时间。因此,为了将日志按天对齐需要在凌晨00:00 启动服务,使得每天轮循得到的日志刚好是完整一天的日志,以提供给访问统计分析程序进行处理。如果是00:00开始生成新的日志,那么轮循得到的日志就是 access_log.0000。

另有网文这样做:

#ErrorLog "|bin/rotatelogs.exe logs/error-%y%m%d.log 86400 480"
#CustomLog "|bin/rotatelogs.exe logs/access-%y%m%d.log 86400 480" common

---------------tomcat 日志设置---------------

访问日志设置:注释不要设置,加上<!-- -->在server.xml里的<host>标签下加上
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
就可以了,下面咱们逐一分析各个参数。

className

官方文档上说了This MUST be set toorg.apache.catalina.valves.AccessLogValveto use the default access log valve. &<60; 想配置访问日志?这就必须得写成这样。

directory

这个东西是日志文件放置的目录,在tomcat下面有个logs文件夹,那里面是专门放置日志文件的,当然你也可以修改,我就给改成了D:\

prefix

这个是日志文件的名称前缀,我的日志名称为localhost_access_log.2007-09-22.txt,前面的前缀就是这个localhost_access_log

suffix

这就是后缀名啦,可以改成别的

pattern

这个是最主要的参数了,具体的咱们下面讲,这个参数的内容比较丰富。

resolveHosts

如果这个值是true的话,tomcat会将这个服务器IP地址通过DNS转换为主机名,如果是false,就直接写服务器IP地址啦

还有一些参数:

rotatable

默认为true,默认的设置使得你的tomcat生成的文件命为prefix(前缀)+.+时间(一般是按天算)+.+suffix(后缀),参照我的日志名就知道了:localhost_access_log.2007-09-22.txt
使用这个需要谨慎,因为你将其设置为false的话,tomcat会忽略时间,不会新生成文件,最后导致你的文件超级大,这样生成的文件名就是:localhost_access_log.txt

condition

这个参数不太实用,可以设置任何值,比如咱们设置成condition="tkq",那么只有当ServletRequest.getAttribute("tkq")为空的时候,才会被记录下来

fileDateFormat

最后的一个参数,很明白,这就是时间格式嘛,但是这个时间格式是针对日志文件起作用的,还记得咱们生成的日志文件全名么:localhost_access_log.2007-09-22.txt,这里面的2007-09-22就是这么来的,如果你想让tomcat每小时生成一个日志文件,也很简单,将这个值设置为:fileDateFormat="yyyy-MM-dd.HH",当然也可以按分钟生成什么的,自己改改吧

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics