nginx에서 JSON 로그를 생성하는 방법
nginx에서 JSON 로그를 생성하려고 합니다.
이와 같은 솔루션은 알고 있습니다만, 로그에 기록하는 필드에는 올바르게 이스케이프해야 하는 사용자 생성 입력(HTTP 헤더 등)이 포함되어 있습니다.
2011년 10월부터 2008년 5월까지 다음과 같은 nginx changelog 엔트리를 알고 있습니다.
*) Change: now the 0x7F-0x1F characters are escaped as \xXX in an
access_log.
*) Change: now the 0x00-0x1F, '"' and '\' characters are escaped as \xXX
in an access_log.
하지만 이것은 여전히 도움이 되지 않는다\xXX
는 JSON 문자열에서 유효하지 않습니다.
HttpSetMiscModule 모듈도 살펴보았습니다.HttpSetMiscModule 모듈에는set_quote_json_str
지시문입니다만, 이것은 단지\x22
도움이 안 되는 줄에 매달려서 말이야
다른 솔루션이 nginx에서 JSON 형식으로 로그인 할 수 있는 방법이 있습니까?
마지막으로 모듈 없이 vanilla nginx를 사용하여 이 작업을 수행할 수 있는 좋은 방법이 있는 것 같습니다.정의:
log_format json_combined escape=json
'{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request":"$request",'
'"status": "$status",'
'"body_bytes_sent":"$body_bytes_sent",'
'"request_time":"$request_time",'
'"http_referrer":"$http_referer",'
'"http_user_agent":"$http_user_agent"'
'}';
escape=json이 nginx 1.11.8에 추가되었습니다.http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format
Nginx용 추가 모듈인 https://github.com/jiaz/nginx-http-json-log을 사용해 보십시오.
다음을 사용할 수 있습니다.
Nginx nginx-http-json-log 추가 모듈
/etc/nginx/conf.d/json_log.conf와 함께 nginx-json-logformat에서 수행한 언어를 사용합니다.
JSON 형식으로 출력되는 Nginx HTTP stub 상태 모듈 버전
PS: if 파라미터(1.7.0)는 조건부 로깅을 활성화합니다.조건이 "0" 또는 빈 문자열로 평가되면 요청이 기록되지 않습니다.
map $status $http_referer{
~\xXX 0;
default 1;
}
access_log /path/to/access.log combined if=$http_referer;
JSON 데이터를 확인하려면 https://github.com/zaach/jsonlint 등의 도구를 사용하는 것이 좋습니다.새로운 로깅 포맷의 출력을 테스트하여 실제 JSON인지 확인할 수 있습니다.
언급URL : https://stackoverflow.com/questions/25049667/how-to-generate-a-json-log-from-nginx
'programing' 카테고리의 다른 글
NSURLSession에서 Swift를 사용하여 쿠키를 가져오려면 어떻게 해야 합니까? (0) | 2023.03.11 |
---|---|
Redux를 사용하여 connect를 사용하여 이 . props에서 간단한 디스패치를 얻는 방법 (0) | 2023.03.11 |
Spring Rest POST Json RequestBody 컨텐츠 유형이 지원되지 않습니다. (0) | 2023.03.11 |
Javascript - 이미지 높이 가져오기 (0) | 2023.03.11 |
각도가 $140입니다.날짜를 UTC 날짜로 변경 후 (0) | 2023.03.11 |