Hi Thomas,
I've created a patch for the file at
https://github.com/OutOfOrder/mod_log_sql/blob/1.100/functions.h
This is the patch:
diff --git a/functions.h b/functions.h
index b35634a..dcbf710 100644
--- a/functions.h
+++ b/functions.h
@@ -90,10 +90,16 @@ static const char *extract_request_query(request_rec *r,
char *a)
static const char *extract_status(request_rec *r, char *a)
{
- if (r->status <= 0) {
+ int status = r->status;
+ if (r->next){
+ request_rec *r2 = r->next;
+ status = r2->status;
+ }
+
+ if (status <= 0) {
return "-";
} else {
- return apr_psprintf(r->pool, "%d", r->status);
+ return apr_psprintf(r->pool, "%d", status);
}
}
I'm not sure if this is the final solution for every use case, but it fixes the
issues at my REST API. Maybe someone else needs the `if` to be a `while`
statement.
Best,
Luc van Donkersgoed
> On 22 sep. 2015, at 13:31, Thomas Goirand <[email protected]> wrote:
>
>> On 09/21/2015 09:38 PM, Luc van Donkersgoed wrote:
>> I ran into this thread because I wanted to use mod_log_sql with
>> mod_rewrite. I ran into the exact problem described in this thread.
>>
>> I managed to fix it by patching libapache2-mod-log-sql and compiling it
>> myself.
>>
>> The adjustment is in
>> functions.h:
>> https://github.com/OutOfOrder/mod_log_sql/blob/1.100/functions.h#L91-L98
>>
>> In this function, request_rec->status is used, but as described
>> in http://httpd.apache.org/docs/2.2/developer/API.html#log_handlers:
>>
>>> When a request has internally redirected, there is the question of what
>> to log. Apache handles this by bundling the entire chain of redirects
>> into a list of request_rec structures which are threaded through the
>> r->prev and r->next pointers. The request_rec which is passed to the
>> logging handlers in such cases is the one which was originally built for
>> the initial request from the client; note that the bytes_sent field will
>> only be correct in the last request in the chain (the one for which a
>> response was actually sent).
>>
>> This is the root cause of the problem. By checking if request_rec is not
>> null, and if that's the case, using the next request's status code, the
>> correct status codes are stored in the database. This solution works for
>> requests through mod_rewrite as well as requests which are not rewritten.
>>
>> Best,
>> Luc van Donkersgoed
>
> Hi Luc,
>
> Would you be able to provide a patch for this?
>
> Cheers,
>
> Thomas Goirand (zigo)
>