2012-04-06 3 views
2

nginx에 대한 사용자 정의 로그 형식을 설정하여 요청을 구문 분석하고 해당 부분을 별도로 기록하도록하는 방법은 무엇입니까?nginx로 구문 분석 된 요청을 기록하십시오.

메일을 계산하는 그림 파일을 제공합니다. 그림의 URL은 다양하지만 규칙을 따릅니다.

http://www.server.com/counter/XXXXX/YYYYY/dailymail.gif 

XXXXX - 전자 메일 캠페인의 ID입니다. YYYYY - 수신자 ID입니다.

내가 변수의 값을 $ 1, $ 2가 그래서

location ~* ^counter/([0-9]+)/([^/]+)/dailymail\.gif$ { 
     access_log /var/log/mailopened.log 
     alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily; 
    } 

같은 부분이 보이는

XXXXX YYYYY DATETIME 

위치와 같은 형식을주고 싶습니다 /counter 위치에 대한 별도의 로그가있다 . 어떻게 그들을 로그 형식으로 사용할 수 있습니까?

답변

5

log_format 지시어는 http 수준에서만 허용되므로 다른 변수로 정의해야합니다. 예 :

http { 
    log_format tracking "$xxxx $yyyy $time_local"; 

나중에, 당신의 위치에, 단지 이러한 변수를 설정하고 tracking 형식으로 로그 : set 통화를 생략하고 명시 적으로 캡처 이름을하는 것이 가능 Nginx에와 PCRE 라이브러리의 최신 버전으로

location ~* ^counter/([0-9]+)/([^/]+)/dailymail\.gif$ { 
    set $xxxx $1; 
    set $yyyy $2; 
    access_log /var/log/mailopened.log tracking; 
    alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily; 
} 

당신이 캡처 이름을 지정할 수 있습니다, nginx를의 최신 버전으로

location ~* ^counter/(?<xxxx>[0-9]+)/(?<yyyy>[^/]+)/dailymail\.gif$ { 
    access_log /var/log/mailopened.log tracking; 
    alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily; 
} 
+1

과'리터를 사용하여 설정 호출을 건너 뜁니다 location (감사 @kolbyjack합니다) ~ ~ ^/카운터/(? [0-9] +)/(? [^ /] +)/dailymail.gif $ {{ – kolbyjack

+0

좋은 캐치! PCRE 버전도 관련이 있습니다 - 최신 Nginx 및 이전 PCRE가있을 수 있습니다. –

+0

좋은 지적. 오래된 pcre를 사용하면'? <'대신'? P <'를 사용해야합니다 – kolbyjack

관련 문제