记录日志时让 Nginx 转义 $http_user_agent 中的空格

记录日志时让 Nginx 转义 $http_user_agent 中的空格

如果 Nginxlog_format配置指令包含该$http_user_agent变量,则记录的值将包含空格。例如,

log_format myformat '$http_referer';

记录如下行:

Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)

我不想要空格,并且更喜欢:

Mozilla/5.0%20(compatible;%20bingbot/2.0;%20+http://www.bing.com/bingbot.htm)

这样做的原因是为了使以后解析日志文件变得更加容易,因为它们将具有空格分隔的字段(但字段内没有空格),可以使用.split_whitespace()Rust 中的方法或FieldsGo 中的函数等轻松地将其分开。

有谁知道如何让 Nginx 转义 log_format 配置指令中使用的变量中的空格?

答案1

据我所知,这样的功能并不存在。

还有其他包含空格的条目,例如"GET / HTTP 1.1"中的access.log

正确的解析方法access.log是首先将嵌入在引号中的每个字符串作为单个项目,然后用空格拆分行中的所有项目。

有很多可用的开源日志分析器,您可以研究它们如何实现access.log文件的读取。

相关内容