annotate mod_http_logging/mod_http_logging.lua @ 2494:d300ae5dba87

mod_smacks: Fix some bugs with smacks-ack-delayed event triggering. The old code had several flaws which are addressed here. First of all this fixes the if statement guarding the event generation There where some timing glitches addressed by this commit as well.
author tmolitor <thilo@eightysoft.de>
date Sun, 12 Feb 2017 21:23:22 +0100
parents 88fec2b2bd58
children 557c976735e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1882
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 -- mod_http_logging
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 --
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 -- Copyright (C) 2015 Kim Alvefur
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 --
1883
c625ed20ebda mod_http_logging: MIT
Kim Alvefur <zash@zash.se>
parents: 1882
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
c625ed20ebda mod_http_logging: MIT
Kim Alvefur <zash@zash.se>
parents: 1882
diff changeset
6 -- COPYING file in the source package for more information.
c625ed20ebda mod_http_logging: MIT
Kim Alvefur <zash@zash.se>
parents: 1882
diff changeset
7 --
1882
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 -- Produces HTTP logs in the style of Apache
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 --
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 -- TODO
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 -- * Configurable format?
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 module:set_global();
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 local server = require "net.http.server";
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local send_response = server.send_response;
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local function log_and_send_response(response, body)
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 if not response.finished then
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 body = body or response.body;
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 local len = body and #body or "-";
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 local request = response.request;
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 local ip = request.conn:ip();
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 local req = string.format("%s %s HTTP/%s", request.method, request.path, request.httpversion);
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 local date = os.date("%d/%m/%Y:%H:%M:%S %z");
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 module:log("info", "%s - - [%s] \"%s\" %d %s", ip, date, req, response.status_code, tostring(len));
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 end
2163
88fec2b2bd58 mod_http_logging: Fix endless loop on 0.9.x (Thanks Mint)
Kim Alvefur <zash@zash.se>
parents: 1883
diff changeset
28 return send_response(response, body);
1882
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 end
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 if module.wrap_object_event then
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 -- Use object event wrapping, allows clean unloading of the module
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 module:wrap_object_event(server._events, false, function (handlers, event_name, event_data)
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 if event_data.response then
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 event_data.response.send = log_and_send_response;
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 end
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 return handlers(event_name, event_data);
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 end);
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 else
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 -- Fall back to monkeypatching, unlikely to behave nicely in the
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 -- presence of other modules also doing this
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 server.send_response = log_and_send_response;
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 function module.unload()
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 server.send_response = send_response;
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 end
99863a6a7b8c mod_http_logging: Produce HTTP logs in the style of Apache
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 end