首页 > 代码库 > apache日志及日志分割

apache日志及日志分割

在apache的配置文件httpd.conf中找到
  ErrorLog logs/error_log          //错误日志
  CustomLog logs/access_log common           //访问日志

 

为什么要分割日志
随着网站的访问越来越大,WebServer产生的日志文件也会越来越大,如果不对日志进行分割,那么只能一次将大的日志(如Apache的日志)整个删除,这样也丢失了很多对网站比较宝贵的信息,因为这些日志可以用来进行访问分析、历史安全监察、历史运行状况监控等,因此管理好这些海量的日志对网站的意义是很大的。
本文将总结一些实用的日志分割方法,希望能够方便 Linux/Unix管理员对日志文件进行有效的管理,如果文件过多过大,可以删除一些历史的文件。
 

一、用apache系统自带的rotatelogs对日志进行截断处理
1、修复文件http.conf,设置如下:通过以下设置.

  ErrorLog "| /usr/local/apache/bin/rotatelogs        /home/apache_log/www.xxx.com.cn/%Y_%m_%d_error_log 86400 480"
      CustomLog "| /usr/local/apache/bin/rotatelogs    /home/apache_log/www.xxx.com.cn/%Y_%m_%d_access_log 86400 480" common

2、重启apache服务,在指定的日志目录中验证。

3、语法分析
     rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]
         rotationtime   //日志文件以秒为单位滚动
         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甚至更大的日志文件,既占硬盘又影响服务器性能。然后建立清除日志文件的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,搞定,就这么简单。这样你就不用不必为日见增大的日志文件烦恼了!


  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时,滚动该日志文件。
 

4、文件名称格式
      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日志及日志分割