You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Glenn <gs...@gluelogic.com> on 2003/09/04 13:38:48 UTC
Re: [PATCH] ErrorLogsWithVhost for Apache 1.3.28
On Tue, Jul 08, 2003 at 12:41:09AM -0400, Glenn wrote:
> With the talk about a minor MMN bump, I put together this patch which
> adds a flag at the end of server_rec. This also changes ErrorLog to
> a TAKE12, with an optional style of "default" or "vhosts", where the
> "vhosts" includes the server name and port in the error log entries.
> The TAKE12 maintains backwards compatibility to existing config files.
>
> Comments appreciated on the method(s) that would most likely get this
> accepted into 1.3.28 or 1.3.29. (global flag, server_rec addition,
> other ...) Thanks!
I reworked this patch (from July!) for 1.3.28. Comments appreciated.
Cheers,
Glenn
diff -ru apache_1.3.28/src/include/httpd.h apache_1.3.28.new/src/include/httpd.h
--- apache_1.3.28/src/include/httpd.h 2003-07-16 16:20:26.000000000 -0400
+++ apache_1.3.28.new/src/include/httpd.h 2003-09-04 06:25:26.000000000 -0400
@@ -967,8 +967,13 @@
int limit_req_line; /* limit on size of the HTTP request line */
int limit_req_fieldsize; /* limit on size of any request header field */
int limit_req_fields; /* limit on number of request header fields */
+
+ int error_format_style; /* format style of error log entries */
};
+/* error format styles for log entry layout */
+enum { ERRORLOG_DEFAULT_STYLE = 0, ERRORLOG_WITH_VHOSTS = 1 };
+
/* These are more like real hosts than virtual hosts */
struct listen_rec {
listen_rec *next;
Only in apache_1.3.28.new/src/include: httpd.h.orig
diff -ru apache_1.3.28/src/main/http_core.c apache_1.3.28.new/src/main/http_core.c
--- apache_1.3.28/src/main/http_core.c 2003-07-07 09:02:28.000000000 -0400
+++ apache_1.3.28.new/src/main/http_core.c 2003-09-04 06:25:26.000000000 -0400
@@ -2076,6 +2076,35 @@
return NULL;
}
+static const char *set_error_log(cmd_parms *cmd, void *dummy,
+ char *arg1, char *arg2)
+{
+ const char *err = ap_check_cmd_context(cmd,
+ NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
+ if (err != NULL) {
+ return err;
+ }
+
+ if (arg2 == NULL) {
+ cmd->server->error_format_style = ERRORLOG_DEFAULT_STYLE;
+ cmd->server->error_fname = arg1;
+ }
+ else {
+ cmd->server->error_fname = arg2;
+ if (strcmp(arg1, "vhosts") == 0) {
+ cmd->server->error_format_style = ERRORLOG_WITH_VHOSTS;
+ }
+ else if (strcmp(arg1, "default") == 0) {
+ cmd->server->error_format_style = ERRORLOG_DEFAULT_STYLE;
+ }
+ else {
+ return "invalid ErrorLog syntax";
+ }
+ }
+
+ return NULL;
+}
+
static const char *set_send_buffer_size(cmd_parms *cmd, void *dummy, char *arg)
{
int s = atoi(arg);
@@ -3450,9 +3479,8 @@
"En-/disable server signature (on|off|email)" },
{ "ServerRoot", set_server_root, NULL, RSRC_CONF, TAKE1,
"Common directory of server-related files (logs, confs, etc.)" },
-{ "ErrorLog", set_server_string_slot,
- (void *)XtOffsetOf (server_rec, error_fname), RSRC_CONF, TAKE1,
- "The filename of the error log" },
+{ "ErrorLog", set_error_log, NULL, RSRC_CONF, TAKE12,
+ "The log style tag (default|vhosts) and filename of the error log" },
{ "PidFile", set_pidfile, NULL, RSRC_CONF, TAKE1,
"A file for logging the server process ID"},
{ "ScoreBoardFile", set_scoreboard, NULL, RSRC_CONF, TAKE1,
Only in apache_1.3.28.new/src/main: http_core.c.orig
diff -ru apache_1.3.28/src/main/http_log.c apache_1.3.28.new/src/main/http_log.c
--- apache_1.3.28/src/main/http_log.c 2003-02-03 12:13:21.000000000 -0500
+++ apache_1.3.28.new/src/main/http_log.c 2003-09-04 06:26:43.000000000 -0400
@@ -388,8 +388,15 @@
* quad is the most secure, which is why I'm implementing it
* first. -djg
*/
- len += ap_snprintf(errstr + len, sizeof(errstr) - len,
- "[client %s] ", r->connection->remote_ip);
+ if (r->server->error_format_style == ERRORLOG_WITH_VHOSTS) {
+ len += ap_snprintf(errstr + len, sizeof(errstr) - len,
+ "[client %s] [%s:%d] ", r->connection->remote_ip,
+ r->server->server_hostname, r->server->port);
+ }
+ else { /* r->error_format_style == ERRORLOG_DEFAULT_STYLE */
+ len += ap_snprintf(errstr + len, sizeof(errstr) - len,
+ "[client %s] ", r->connection->remote_ip);
+ }
}
if (!(level & APLOG_NOERRNO)
&& (save_errno != 0)