You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Alexei Kosut <ak...@hyperreal.com> on 1996/08/06 21:33:33 UTC
cvs commit: apache/src mod_log_config.c
akosut 96/08/06 12:33:32
Modified: src mod_log_config.c
Log:
Add %v, %p, %T and %{}t directives to mod_log_config.
Revision Changes Path
1.8 +46 -30 apache/src/mod_log_config.c
Index: mod_log_config.c
===================================================================
RCS file: /export/home/cvs/apache/src/mod_log_config.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C3 -r1.7 -r1.8
*** mod_log_config.c 1996/06/27 01:23:26 1.7
--- mod_log_config.c 1996/08/06 19:33:31 1.8
***************
*** 59,75 ****
* The argument to LogFormat is a string, which can include literal
* characters copied into the log files, and '%' directives as follows:
*
* %...h: remote host
* %...l: remote logname (from identd, if supplied)
! * %...u: remote user (from auth; may be bogus if return status (%s) is 401)
! * %...t: time, in common log format time format
* %...r: first line of request
* %...s: status. For requests that got internally redirected, this
* is status of the *original* request --- %...>s for the last.
! * %...b: bytes sent.
! * %...{Foobar}i: The contents of Foobar: header line(s) in the request
! * sent to the client.
! * %...{Foobar}o: The contents of Foobar: header line(s) in the reply.
*
* The '...' can be nothing at all (e.g. "%h %u %r %s %b"), or it can
* indicate conditions for inclusion of the item (which will cause it
--- 59,80 ----
* The argument to LogFormat is a string, which can include literal
* characters copied into the log files, and '%' directives as follows:
*
+ * %...b: bytes sent.
* %...h: remote host
+ * %...{Foobar}i: The contents of Foobar: header line(s) in the request
+ * sent to the client.
* %...l: remote logname (from identd, if supplied)
! * %...{Foobar}o: The contents of Foobar: header line(s) in the reply.
! * %...p: the port the request was served to
* %...r: first line of request
* %...s: status. For requests that got internally redirected, this
* is status of the *original* request --- %...>s for the last.
! * %...t: time, in common log format time format
! * %...{format}t: The time, in the form given by format, which should
! * be in strftime(3) format.
! * %...T: the time taken to serve the request, in seconds.
! * %...u: remote user (from auth; may be bogus if return status (%s) is 401)
! * %...v: the name of the server (i.e. which virtual host?)
*
* The '...' can be nothing at all (e.g. "%h %u %r %s %b"), or it can
* indicate conditions for inclusion of the item (which will cause it
***************
*** 94,115 ****
* server. If it doesn't have its own TransferLog, it writes to the
* same descriptor (meaning the same process for "| ...").
*
- * That means that you can do things like:
- *
- * <VirtualHost hosta.com>
- * LogFormat "hosta ..."
- * ...
- * </VirtualHost>
- *
- * <VirtualHost hosta.com>
- * LogFormat "hostb ..."
- * ...
- * </VirtualHost>
- *
- * ... to have different virtual servers write into the same log file,
- * but have some indication which host they came from, though a %v
- * directive may well be a better way to handle this.
- *
* --- rst */
#define DEFAULT_LOG_FORMAT "%h %l %u %t \"%r\" %s %b"
--- 99,104 ----
***************
*** 197,202 ****
--- 186,193 ----
char *log_header_out (request_rec *r, char *a)
{
char *cp = table_get (r->headers_out, a);
+ if (!strcasecmp(a, "Content-type") && r->content_type)
+ cp = r->content_type;
if (cp) return cp;
return table_get (r->err_headers_out, a);
}
***************
*** 208,228 ****
{
long timz;
struct tm *t;
! char tstr[MAX_STRING_LEN],sign;
t = get_gmtoff(&timz);
- sign = (timz < 0 ? '-' : '+');
- if(timz < 0)
- timz = -timz;
-
- strftime(tstr,MAX_STRING_LEN,"[%d/%b/%Y:%H:%M:%S ",t);
! sprintf (tstr + strlen(tstr), "%c%02ld%02ld]",
! sign, timz/3600, timz%3600);
return pstrdup (r->pool, tstr);
}
/*****************************************************************
*
* Parsing the log format string
--- 199,241 ----
{
long timz;
struct tm *t;
! char tstr[MAX_STRING_LEN];
t = get_gmtoff(&timz);
! if (a && *a) /* Custom format */
! strftime(tstr, MAX_STRING_LEN, a, t);
! else { /* CLF format */
! char sign = (timz < 0 ? '-' : '+');
!
! if(timz < 0) timz = -timz;
!
! strftime(tstr,MAX_STRING_LEN,"[%d/%b/%Y:%H:%M:%S ",t);
! sprintf (tstr + strlen(tstr), "%c%02ld%02ld]",
! sign, timz/3600, timz%3600);
! }
return pstrdup (r->pool, tstr);
}
+ char *log_request_duration (request_rec *r, char *a) {
+ char duration[22]; /* Long enough for 2^64 */
+
+ sprintf(duration, "%ld", time(NULL) - r->request_time);
+ return pstrdup(r->pool, duration);
+ }
+
+ char *log_virtual_host (request_rec *r, char *a) {
+ return pstrdup(r->pool, r->server->server_hostname);
+ }
+
+ char *log_server_port (request_rec *r, char *a) {
+ char portnum[10];
+
+ sprintf(portnum, "%d", r->server->port);
+ return pstrdup(r->pool, portnum);
+ }
+
/*****************************************************************
*
* Parsing the log format string
***************
*** 237,248 ****
--- 250,264 ----
{ 'l', log_remote_logname, 0 },
{ 'u', log_remote_user, 0 },
{ 't', log_request_time, 0 },
+ { 'T', log_request_duration, 0 },
{ 'r', log_request_line, 1 },
{ 's', log_status, 1 },
{ 'b', log_bytes_sent, 0 },
{ 'i', log_header_in, 0 },
{ 'o', log_header_out, 0 },
{ 'e', log_env_var, 0 },
+ { 'v', log_virtual_host, 0 },
+ { 'p', log_server_port, 0 },
{ '\0' }
};