시간 단위로 로그를 롤링하고 PHP 정규 표현식을 사용하여 로그를 분석할 수 있습니다
$logLine ='127.0.0.1 - - [22/May/2015:17:09:13 +0800] "GET /sale/images/y-select.png HTTP/1.1" 200 1095'; $pattern = '/^(?P<ip>[0-9.]+) - - \[(?P<time>[^\]]+)\]+ "GET (?P<url>[^ ]+) HTTP\/1.[1|0|2]" (?P<status>[0-9.]+) (?P<size>[0-9.]+)/i'; preg_match($pattern, $log, $match); //var_dump($match); $ip = $match['ip']; $time = strtotime($match['time']); $url = $match['url']; $status = $match['status']; $size = $match['size']; printf("IP:%s 访问时间:%s URL:%s 状态:%s 文件尺寸:%s",$ip,$time,$url,$status,$size);
이 작업도 수행할 수 있습니다
정규 표현식을 사용하여 Apache 로그 파일 분리
www.MyException.Cn 네티즌 공유일: 2015-08-26 조회수: 17회
정규식을 사용하여 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)"
클라이언트의 IP 주소입니다.
클라이언트 identd 프로세스에 의해 결정된 RFC1413 ID(identity)입니다. 출력에서 "-" 기호는 여기에 있는 정보가 유효하지 않음을 나타냅니다.
웹페이지에 접속하기 위해 HTTP 인증 시스템에서 얻은 클라이언트 ID(사용자 ID)입니다. 웹페이지가 비밀번호로 보호되어 있지 않은 경우 이 항목은 "-"입니다.
서버가 요청 처리를 완료한 시간입니다.
클라이언트 작업에서 요청한 리소스가 사용하는 프로토콜입니다.
서버가 클라이언트에 반환한 상태 코드입니다.
응답 헤더를 제외하고 클라이언트에 반환되는 바이트 수입니다. 반환되는 정보가 없는 경우 이 항목은 "-"이어야 합니다.
"리퍼러" 요청 헤더.
"User-Agent" 요청 헤더.
정보를 추출하는 데 사용되는 정규 표현식은 다음과 같이 구성됩니다.
^: 각 줄의 시작 부분과 일치합니다.
([0-9.]+)s: IP 주소를 일치시킵니다.
([w.-]+)s: 숫자, 문자, 밑줄 또는 점 구분 기호로 구성된 ID와 일치합니다.
([w.-]+)s: 숫자, 문자, 밑줄 또는 점 구분 기호로 구성된 사용자 ID와 일치합니다.
([[^[]]+])s: 일치 시간.
"((?:[^"]|")+)"s: 일치 요청 정보, 이스케이프된 큰따옴표가 큰따옴표 안에 나타날 수 있습니다.
(d{3})s: 일치 상태 코드
(d+|-)s: 응답 바이트 수 또는 -와 일치합니다.
"((?:[^"]|")+)"s: "Referer" 요청 헤더와 일치하며 큰따옴표로 묶을 수 있습니다. 이스케이프된 큰따옴표가 나타납니다."
"((?:[^"]|")+)": "User-Agent" 요청 헤더와 일치하며, 이스케이프된 큰따옴표가 큰따옴표 안에 나타날 수 있습니다.
$: 끝부분과 일치합니다. line
최종 표현식은 다음과 같습니다:
^([0-9.]+)s([w.-]+)s([w.-]+)s([[ ^[]] +])s"((?:[^"]|")+)"s(d{3})s(d+|-)s"((?:[^"]|")+ )"s" ((?:[^"]|")+)"$