Apache日志文件的正则表达式解析

Apache日志文件的正则表达式解析

2010-06-22 16:52 by Register, 511 阅读, 0 评论, 收藏编辑

使用正则表达式分隔Apache日志文件

通用日志格式的Apache日志文件示例:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

组合日志格式的Apache日志文件示例:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"

组合格式的日志文件比通用格式的日志文件多了两条请求头中包含的信息,其他部分完全一样,以组合格式的日志文件为例,日志中的每项代表的含义如下(详细信息参见Apache文档):

  1. 客户端的IP地址。
  2. 由客户端identd进程判断的RFC1413身份(identity),输出中的符号"-"表示此处的信息无效。
  3. HTTP认证系统得到的访问该网页的客户标识(userid),如果网页没有设置密码保护,则此项将是"-"。
  4. 服务器完成请求处理时的时间。
  5. 客户的动作\请求的资源\使用的协议。
  6. 服务器返回给客户端的状态码。
  7. 返回给客户端的不包括响应头的字节数.如果没有信息返回,则此项应该是"-"。
  8. "Referer"请求头。
  9. "User-Agent"请求头。

用来提取信息的正则表达式组成:

  1. ^ :匹配每一行的开头。
  2. ([0-9.]+)\s :匹配IP地址。
  3. ([\w.-]+)\s :匹配identity,由数字字母下划线或点分隔符组成。
  4. ([\w.-]+)\s :匹配userid,由数字字母下划线或点分隔符组成。
  5. (\[[^\[\]]+\])\s :匹配时间。
  6. "((?:[^"]|\")+)"\s :匹配请求信息,双引号中可能出现转义的双引号\"。
  7. (\d{3})\s :匹配状态码。
  8. (\d+|-)\s :匹配响应字节数或-。
  9. "((?:[^"]|\")+)"\s :匹配"Referer"请求头,双引号中可能出现转义的双引号\"。
  10. "((?:[^"]|\")+)" :匹配"User-Agent"请求头,双引号中可能出现转义的双引号\"。
  11. $ :匹配行尾。

最终的表达式如下:

^([0-9.]+)\s([\w.-]+)\s([\w.-]+)\s(\[[^\[\]]+\])\s"((?:[^"]|\")+)"\s(\d{3})\s(\d+|-)\s"((?:[^"]|\")+)"\s"((?:[^"]|\")+)"$

C#示例:

 


在C#中使用

1 staticvoid Main(string[] args)
2 {
3 string pattern ="^([0-9.]+)\\s([\\w.-]+)\\s([\\w.-]+)\\s(\\[[^\\[\\]]+\\])\\s\"((?:[^\"]|\\\")+)\"\\s(\\d{3})\\s(\\d+|-)\\s\"((?:[^\"]|\\\")+)\"\\s\"((?:[^\"]|\\\")+)\"$";
4 string input ="127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb.gif HTTP/1.0\"200 2326 \"http://www.example.com/start.html\" \"Mozilla/4.08 [en] (Win98; I ;Nav)\"";
5   System.Text.RegularExpressions.GroupCollection groups =System.Text.RegularExpressions.Regex.Match(input, pattern).Groups;
6 for (int i =0; i < groups.Count; i++)
7 {
8 Console.WriteLine(groups[i].Value);
9 }
10 }

时间: 2024-09-13 22:38:01

Apache日志文件的正则表达式解析的相关文章

linux系统apache日志文件配置详解

Linux系统下apache日志文件设置(每天单独生成一个日志文件) 引言: Apache默认安装下,日志记录只有一个文件,时间久了之后,这个文件会变的很大,管理员要想查看分析日志,光打开日志就要花费很长时间,甚至还会影响服务器运行. 下面教大家设置apache,让服务器每天单独生成一个日志文件,这样管理.分析日志会方便很多. vi /etc/httpd/conf/httpd.conf #编辑文件 #ErrorLog logs/error_log #注释此行,添加下面这行  ErrorLog "

解决Apache日志文件ACCESS.LOG日益膨胀的一个办法:

access|apache|解决 将httpd.conf中CustomLog logs/access.log common 改成 CustomLog "|c:/apache/bin/rotatelogs c:/apache/logs/%Y_%m_%d.access.log 86400 480" common 重启Apache 其中c:/apache/是你安装apache的路径这样每一天生成一个日志文件 

删除WDCP网站日志(Nginx或者Apache日志文件)

今天,有网友咨询需要解决WDCP面板站点环境中需要删除网站和系统日志文件,因为网站运行一年多以来导致日志数据巨大占用了大量的硬盘空间,几乎硬盘撑满,所以必须要删除日志.无论是系统日志还是网站日志,有些时候还是有用的,我们可以查看网站的访问情况以及分析网站的爬虫频率等,但大部分时候我们是不会去查看的. 所以,随着时间的积累,日志会越来越大的占用VPS主机硬盘容量,我们需要定期的处理.在WDCP面板中,无论我们启动的是NGINX还是APACHE环境,系统里都有日志文件的,一个是错误日志,一个是访问日

apache日志文件详解和实用分析命令_Linux

一.日志分析 如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error_log 1).access_log access_log为访问日志,记录所有对apache服务器进行请求的访问,它的位置和内容由CustomLog指令控制,LogFormat指令可以用来简化该日志的内容和格式 例如,我的其中一台服务器配置如下: 复制代码 代码如下: CustomLog "| /usr/sbin/rotatelogs /var/log/apache

apache日志文件过大解决方法

置web服务器时,一般我们都会记录下请求的信息,以及错误的相关信息.  代码如下 复制代码 ErrorLog "/home/zhangy/apache/www.test.com-error.log" CustomLog "/home/zhangy/apache/www.test.com-access.log" common 做了上面的配置,如果你不定期删除的话,我想随着时间的推移,这些日志文件能达到几个G的大小.占用资源不说,还不利于我们查看日志信息.其实对访问信息

限制apache日志文件access.log大小方法详解

用到apache自带的rotatelogs小工具 语法如下: rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ] 参数解释: -l :使用本地时间代替GMT时间作为时间基准.注意:在一个改变GMT偏移量(比如夏令时)的环境中使用-l会导致不可预料的结果. logfile:它加上基准名就是日志文件名.如果logfile中包含"%",则它会被视为用于strftime()的格式字符串:否则它会被自动加上以秒

apache日志文件太大按日期/指定生成日志文件

指定apache日志每天生成一个文件 Linux系统配置方法 在apache的配置文件httpd.conf中找到  代码如下 复制代码 ErrorLog logs/error_log CustomLog logs/access_log common 将其改为 ErrorLog "| /usr/local/apache/bin/rotatelogs /home/logs/www/%Y_%m_%d_error_log 86400 480" CustomLog "| /usr/lo

Apache日志文件太大解决办法(access.log error.log)

有没有发现Apache生成的日志文件一天比一天大,不是一般大,若你apache安装在C盘,那可惨了,不几天硬盘就满了,太恐怖了,有没有办法优化一下日志,让它不那么大?答案是有的. 一.停止Apache服务,删除Apache下/logs/目录中的error.log和access.log文件. 二.打开Apache的conf/httpd.conf配置文件,找到以下配置信息:  代码如下 复制代码 ErrorLog logs/error.log CustomLog logs/access.log co

apache日志按日期生成文件 限制日志文件大小

先我们来看我日志不分日期大小的情况配置方法  代码如下 复制代码 LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined CustomLog "E:/1408.log"  combined 这样生成的访问日志超大了并且后面100多GB了,无法打开查看了,这样肯定不是办法于是搜索了日志按大小存放的方法  代码