| 
       
	使用apache系统自带的rotatelogs对日志进行截断处理 
	一,修改文件httpd.conf 使用绝对路径修改,不要使用相对路径,跑不起来的啦。 
	CustomLog "logs/access.log" common 原来的样子 
	ErrorLog "logs/error.log" 原来的样子 
	CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common 修改后的样子 
	CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common 修改后的样子 
	ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M" 
	二,重启apache服务,在指定的日志目录中验证。 
	三:语法分析 
	rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ] 
	可以看到,该命令其实只有两种选项用以对日志文件logfile进行操作。且必须选择其中一种方式。 
	第一种,rotationtime 日志文件以秒为单位滚动 
	第二种, filesizeM 指定以filesizeM文件大小滚动,而不是按照时间或时差滚动 
	举例:ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M" 
	此配置会在错误日志大小增长到5兆字节时滚动该日志, 
	日志文件名后缀会按照如下格式创建:errorlog.YYYY-mm-dd-HH_MM_SS 。 
	至于其他选项, -l 和offset都是和时区相关的,不理他。 
	四:文件名称格式(下图是从官网拷贝的) 
	errorlog.%Y-%m-%d-%H_%M_%S-------------------errorlog.YYYY-mm-dd-HH_MM_SS 对照研究吧。 
	  
	
		
			| 
				%A | 
			
				星期名全称(本地的) | 
		 
		
			| 
				%a | 
			
				3个字符的星期名(本地的) | 
		 
		
			| 
				%B | 
			
				月份名的全称(本地的) | 
		 
		
			| 
				%b | 
			
				3个字符的月份名(本地的) | 
		 
		
			| 
				%c | 
			
				日期和时间(本地的) | 
		 
		
			| 
				%d | 
			
				2位数的一个月中的日期数 | 
		 
		
			| 
				%H | 
			
				2位数的小时数(24小时制) | 
		 
		
			| 
				%I | 
			
				2位数的小时数(12小时制) | 
		 
		
			| 
				%j | 
			
				3位数的一年中的日期数 | 
		 
		
			| 
				%M | 
			
				2位数的分钟数 | 
		 
		
			| 
				%m | 
			
				2位数的月份数 | 
		 
		
			| 
				%p | 
			
				am/pm12小时制的上下午(本地的) | 
		 
		
			| 
				%S | 
			
				2位数的秒数 | 
		 
		
			| 
				%U | 
			
				2位数的一年中的星期数(星期天为一周的第一天) | 
		 
		
			| 
				%W | 
			
				2位数的一年中的星期数(星期一为一周的第一天) | 
		 
		
			| 
				%w | 
			
				1位数的星期几(星期天为一周的第一天) | 
		 
		
			| 
				%X | 
			
				时间(本地的) | 
		 
		
			| 
				%x | 
			
				日期(本地的) | 
		 
		
			| 
				%Y | 
			
				4位数的年份 | 
		 
		
			| 
				%y | 
			
				2位数的年份 | 
		 
		
			| 
				%Z | 
			
				时区名 | 
		 
		
			| 
				%% | 
			
				符号"%"本身 | 
		 
	
 
 
	  
	如何按日期生成apache日志文件及限制apache日志文件大小 
	  
	  
 
用到apache自带的rotatelogs小工具 
	语法如下: 
	rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ] 
	参数解释: 
	-l :使用本地时间代替GMT时间作为时间基准。注意:在一个改变GMT偏移量(比如夏令时)的环境中使用-l会导致不可预料的结果。 
	logfile:它加上基准名就是日志文件名。如果logfile中包含"%",则它会被视为用于strftime()的格式字符串;否则它会被自动加上以秒为单 
	位的".nnnnnnnnnn"后缀。这两种格式都表示新的日志开始使用的时间。 
	rotationtime :日志文件滚动的以秒为单位的间隔时间。 
	offset :相对于UTC的时差的分钟数。如果省略,则假定为"0"并使用UTC时间。比如,要指定UTC时差为"-5小时"的地区的当地时间,则此参数 
	应为"-300"。 
	filesizeM :指定以filesizeM文件大小滚动,而不是按照时间或时差滚动。 
	例子: 
	1、按时间滚动日志文件: 
	错误日志:ErrorLog "|/data/apache/bin/rotatelogs 日志存放目录/%Y%m%d_error.log 86400 480" 
	访问日志:CustomLog "|/data/apache/bin/rotatelogs 日志存放目录/%Y%m%d_access.log 86400 480" common 
	其中: 
	/data/apache:为apache的安装目录,根据自己实际情况确定; 
	86400:秒,24小时,表示生成的日志文件按天滚动,也就是每天生成一个日志文件; 
	480:分,时间偏移。 
	同理可以按小时滚动日志文件,每隔一个小时,几个小时。。。生成一个日志文件。 
	扩展:可以写个脚本定时删除日志文件,只保留几天的日志,如果网站访问量比较大,一天会生成几十上百M甚至更大的日志文件,既占硬盘又影响服务器性能。 
	2、按大小滚动日志文件: 
	错误日志:ErrorLog "|/data/apache/bin/rotatelogs -l 日志存放目录/%Y%m%d_error.log 5M" 
	访问日志:CustomLog "|/data/apache/bin/rotatelogs -l 日志存放目录/%Y%m%d_access.log 5M" common 
	当日志文件达到5M时,滚动该日志文件。 
	  
 
apache日志管理 
web服务器日志轮循比较好的方式有三种: 
第一种方法是利用Linux系统自身的日志文件轮循机制:logrotate; 
第二种方法是利用apache自带的日志轮循程序rotatelogs; 
第三种是使用在apache的FAQ中推荐发展已经比较成熟的一个日志轮循工具cronolog。 
这里我给大家带来的是用apache自带的日志轮循程序rotatelogs,并用shell脚本定期删除日志文件,只保留近3天的文件,以免日志文件占满 
磁盘空间。 
修改主配置文件httpd.conf 
找到以下内容,并修改成: 
ErrorLog /var/log/httpd/error_log 
CustomLog "|/usr/local/apache2/bin/rotatelogs /var/log/httpd/access_log 86400 400M" combined 
86400 ---日志滚动的时间是一天 
400 ---日志文件最大400M就滚动 
combined ---采用复合格式 
然后建立清除日志文件的shell脚本,文件名为clean_log 
#! /bin/bash 
logdir=/var/log/httpd 
cd ${logdir} 
declare -i filesum=`ls access_log.* | wc -l` 
declare -i delnum=$filesum-3 
if [ "${delnum}" -ge 1 ];then 
rm -rf `ls -tr access_log.* | head -${delnum}` 
fi 
chmod 755 clean_log 
这样就保留了最近3天的日志文件。 
建立自动化任务 
01 04 * * * /usr/local/crontab/clean_log 
ok,搞定,就这么简单。这样你就不用不必为日见增大的日志文件烦恼了! 
	  
	  
	rotatelogs - rotate Apache logs without having to kill the server 
	描述: 
	rotatelogs 是一個小程式用來與Apache's 導向(pined)的log相結合, 
	可以讓您的log依照您的需求而產生 . 
	 
	語法: 
	rotatelogs logfile rotationtime [offset] 
	參數: 
	logfile 基本的logfile名稱,可以加上 strftime(3) 所支援的%字元參數, 
	常用的參數為:  
	%Y 表示年份,以今年來說就是 2008 
	%m 表示月份,以本月來說就是 04 
	%d 表示天數,以今天來說就是 18 
	若沒有加上,則會附加 .nnnn 為檔案名稱, 其中 nnnn 為log 產生的時間. 
	rotationtime 輪迴的時間, 單位: 秒 
	offset 與UTC時間的差異,單位為分鐘,若相差5小時,則可使用 -300 這個參數 
	範例: (以 accesslog為例 ,修改 httpd.conf 檔案) 
	將 httpd-access.og 由rotalogs 每間隔86400秒 , 產生 /var/log/httpd-access_log-月份-日期 檔案. 
 
原有內容: 
CustomLog /var/log/httpd-access.log combined 
改為: 
CustomLog "| rotatelogs /var/log/httpd-access.log-%m-%d 86400" combined 
	  
	  
	cronolog 割断分析apache日志配置笔记 
	  
	环境:centos 5.1 + Apache/2.0.61+cronolog(1.6.2) 
	使用cronolog可以格式化日志文件的格式,比如按时间分割,易于管理和分析。 
	cronolog的安装配置非常简单,简要说明如下: 
	1.下载软件 
	http://cronolog.org/download/index.html 
	使用wget下载:http://cronolog.org/download/cronolog-1.6.2.tar.gz 
	2.解压缩 
	tar -zxvf cronolog-1.6.2.tar.gz 
	3.进入相应的目录,编译,安装 
	[root@localhost ~]#./configure 
	[root@localhost ~]#make 
	[root@localhost ~]#make install 
	4.测试cronolog是否安装成功 
	[root@localhost apache2]# which cronolog 
	/usr/local/sbin/cronolog 
	[root@localhost apache2]# cronolog -V 
	cronolog version 1.6.2 
	注:如果上述cronolog没有正确安装的话,下面修改httpd.conf 将不能正常启动 
	4.修改apache配置文件/usr/local/apache2/conf/httpd.conf 
	#CustomLog logs/access_log common 注销掉原有的日志格式,改为一下 
	CustomLog "|/usr/local/sbin/cronolog /usr/local/apache2/logs/access_log.%Y%m%d" combined 
	如果有虚拟主机的话,还要在虚拟主机的VirtualHost中设置:(本文的访问日志都放在access_log中) 
	CustomLog "|/usr/local/sbin/cronolog /usr/local/apache2/logs/access_log.%Y%m%d" combined 
	本文配置文件如下: 
	<VirtualHost *:443> 
	DocumentRoot /usr/local/smp/ 
	ServerName 218.61.31.211 
	AddHandler cgi-script .cgi 
	<Directory "/usr/local/smp/htdocs"> 
	AllowOverride None 
	Options ExecCGI Indexes 
	Order allow,deny 
	Allow from all 
	</Directory> 
	ErrorLog logs/error_log 
	CustomLog "|/usr/local/sbin/cronolog /usr/local/apache2/logs/access_log.%Y%m%d" combined 
	</VirtualHost> 
	5. 杀掉httpd进程 ,重新启动apache 
	[root@localhost cronolog-1.6.2]# cd /usr/local/apache2/logs/ 
	[root@localhost logs]# killall httpd 
	[root@localhost logs]# rm access_log  
	[root@localhost logs]# /usr/local/apache2/bin/apachectl start  
	注意确保apache正常启动 
	[root@localhost logs]# ps -fe 
	root 16750 1 0 14:56 ? 00:00:00 /usr/local/apache2/bin/httpd -k start 
	root 16751 16750 0 14:56 ? 00:00:00 /usr/local/sbin/cronolog /usr/local/apache2/logs/access_log.%Y%m%d 
	nobody 16774 16750 0 14:56 ? 00:00:00 /usr/local/apache2/bin/httpd -k start 
	nobody 16776 16750 0 14:56 ? 00:00:00 /usr/local/apache2/bin/httpd -k start 
	nobody 16777 16750 0 14:56 ? 00:00:00 /usr/local/apache2/bin/httpd -k start 
	nobody 16800 16750 0 15:06 ? 00:00:00 /usr/local/apache2/bin/httpd -k start 
	nobody 16818 16750 0 15:11 ? 00:00:00 /usr/local/apache2/bin/httpd -k start 
	nobody 16832 16750 0 15:17 ? 00:00:00 /usr/local/apache2/bin/httpd -k start 
	nobody 16843 16750 0 15:22 ? 00:00:00 /usr/local/apache2/bin/httpd -k start 
	6.检查cronolog是否正常割接 
	从ie访问该机器,在web上多刷新几次.刚开始在/usr/local/apache2/logs/可能没有生成,但经过你多刷新几次,就会出现要的效果,是以天来分割: 
	access_log.20081103 
	[root@localhost logs]# ls 
	access_log.20081103 error_log 
	强调:/usr/local/apache2/logs/access_log 的原文件没有删除的话,有可能不会出现access_log.20081103。 apache在启动的时候,默认访问日志都会 
	写入/usr/local/apache2/logs/access_log中,即使此时你进行access_log改名为access_log.bak, 日志就会写入access_log.bak,对于运行apache来说access_log 
	改名了,但是其inode节点号没变.只有在重启apache的时候 ,apache发现/usr/local/apache2/logs/ 没有access_log文件,此时会自动创建. 
	7.周期计划删除分割的日志 (每天打包前一天的日志,每天删除半月前的打包日志 
	[root@ceshiji conf]# crontab -e 
	0 1 * * * /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1 
	0 3 * * * /bin/gzip -f /usr/local/apache2/logs/access_log.`date -d yesterday +%Y%m%d` 
	0 4 * * * /usr/bin/find /usr/local/apache2/logs/ -name access_*.gz -mtime +15 -exec rm -rf {} \; 
	参考来源:http://bbs.linuxtone.org/thread-93-1-1.html 
 
 
      (责任编辑:IT) |