Nginx中log变量及Tengine的log_unescape
2013-12-27 13:21
155 查看
Nginx变量
Nginx的log模块是很多人做日志输出的首选切入点。
Nginx默认access_log
语法写入服务器本地路径或NFS,用于以后的汇总分析;在此基础上,Tengine增强了日志目标,可以通过组合管道功能或syslog接口进行远程集中日志存储。
log功能的核心是变量。灵活而全面的变量定义是Nginx日志模块的优势体现。在2011年时曾经整理过一些核心变量的意义
,主要是第一种类型的核心变量。最近两年核心模块进行过比较大的变动,涌现出比较多的优秀第三方模块,也出现了Tengine/OpenResty这样优秀的第三方发行版,变量的定义大大丰富。
Nginx变量包括:
- 核心模块提供了足够的变量定义(
Embedded Variables
); - 通过rewrite模块的set语法自定义变量(
rewrite#set
); - 第三方模块提供额外的变量定义(使用ngx_http_add_variable设置一系列ngx_http_variable_t的变量);
- 通过第三方模块做变量内容变换/改写(如agentzh/set-misc-nginx-module)。
在这种情况下做一个变量大全
需要一定的工作量,根据实际使用情况去查阅各类模块的文档是个捷径。如果有人整理过也请告诉我。
log_unescape
在实际使用中会遇到一个问题关于日志中被转义的字符,比如输出一段json数据,其中的引号会被转义。这种转义规则参考了apache httpd的习惯。早在2008年就有讨论。Nginx官方社区对此问题的态度是继续保留转义。
在实际使用中,查看和处理转义过的字符串带来一些负担,在权衡中选择不做转义也经常是一种选择。Tengine在2012年将log_unescape
的功能加入,可以打开/关闭转义功能,或者仅针对ASCII字符,方便大规模日志处理。
当然escape问题并不只出现在log阶段,比如这里,解决方法也不一定都是修改nginx代码或配置——在分析端做转义处理也是一种可行的思路。%
http://mib.cc/2013/12/27/background-of-log_unescape-in-tengine_nginx.html
相关文章推荐
- nginx access.log format 允许的变量
- nginx变量(日志log_format)
- Nginx之变量
- 代替nginx的服务器 - The Tengine Web Server
- nginx日志分割(log rotation)
- nginx核心函数指令2:error_log解析
- Linux CentOS 7 & Tengine(Nginx)安装与配置
- Nginx 变量漫谈(一)(转)
- unknown log format "main" in /nginx/conf/nginx.conf
- nginx log format
- nginx一些内置的变量
- tengine(nginx)正向代理和反向代理
- 解决:LNMP架构下nginx的error_log日志过大问题
- nginx之头部变量x_forwarded_for
- Tengine(Nginx的升级版)的健康检查
- nginx 用log_format设置日志格式
- nginx变量使用方法详解(8)
- Nginx启动报错: could not open error log file: open() &q
- nginx 变量参数
- nginx开发从入门到精通 http://tengine.taobao.org/book/