Can not use $bytes_sent in module (complex values)
mdounin at mdounin.ru
Wed Sep 19 00:06:56 UTC 2012
On Tue, Sep 18, 2012 at 03:55:38PM +0200, Benjamin Grössing wrote:
> I am currently working on a nginx module, that parses user defined
> strings for variables using ngx_http_complex_value_t. That works great
> with all variables defined in ngx_http_variables.c (i.e.
> $body_bytes_sent). However, variables as $bytes_sent do not exist here
> since ngx_http_log_module uses its own variable parsing system. What
> is the best way to use these extra variables in my module? I have
> thought of the following options, I am not very sure about what is the
> best way to go:
> a) Copy the ngx_http_log_module code in my own module and rename every
> single type and function to avoid double definitions. Reuse functions
> and types from there.
> b) Move the ngx_http_log_module code in my own module directory and
> compile it only there. Reuse functions and types from there.
> c) Write own variable parsing system, reuse a few snippets from
> ngx_http_variables and ngx_http_log_module, whatever fits best.
> d) Use complex values and try to extend the ngx_http_core_variables
> array to include $body_bytes_sent and the other missing variables (I
> don't understand why they are not included here anyway?).
> e) Any better way to achieve that?
> I'd really appreciate your help.
All variables that are currently present only in log module should
really be made available as normal variables as well. They aren't
yet mostly due to historical reasons (log module appeared before
normal variables were implemented) and the fact that most of
them are only usable for logging.
No idea what would be best for your particular module, but in
general it's better to use complex values and what's available via
normal variables. Unless you need $bytes_sent right now - it's
probably the best aproach, and missing variables will be available
once they appear in nginx.
(The latter is something you may speedup by submitting a good
patch. Most tricky part here would be to follow coding style.)
More information about the nginx-devel