Differences between version 4 and previous revision of Apache22SingleLog.

Other diffs: Previous Major Revision, Previous Author

Newer page: version 4 Last edited on Saturday, 21 June 2008 1:33:00 by CyberLeo Revert
Older page: version 3 Last edited on Saturday, 21 June 2008 0:19:49 by CyberLeo Revert
@@ -48,4 +48,6 @@
  if ((level & APLOG_STARTUP) != APLOG_STARTUP) { 
 </verbatim> 
  
 Place this into "/usr/ports/www/apache22/files/patch-server:log.c-ErrorLog-ServerName" to have ports patch automatically. 
+  
+You can use a program such as [vhostlog] to handle the log splitting.  

version 4

http://www.blinkenlights.nl/apache/

Got the idea from here: http://svn.blinkenlights.nl/viewvc.cgi/apache/trunk/apache-2/server/

Prefix every log line with the Server Name responsible for generating the log line.

Access log is easy, just add %v to the Log Format declaration, as follows:

    LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhostlog
    CustomLog "|/usr/local/bin/loghandler" vhostlog

The Custom Log statement pipes the lines via stdin to a process spawned and handled by httpd itself. Will respawn if it dies, but be fast and careful.

The Error Log is annoying, though. You can't format that, so use the following source patch to prepend the current Server Name (or - for core pre-startup messages).

--- server/log.c.orig   2007-12-30 23:00:52.000000000 -0600
+++ server/log.c        2008-06-20 19:35:09.000000000 -0500
@@ -559,14 +559,20 @@
         }
     }

-    if (logf && ((level & APLOG_STARTUP) != APLOG_STARTUP)) {
-        errstr[0] = '[';
-        ap_recent_ctime(errstr + 1, apr_time_now());
-        errstr[1 + APR_CTIME_LEN - 1] = ']';
-        errstr[1 + APR_CTIME_LEN    ] = ' ';
-        len = 1 + APR_CTIME_LEN + 1;
+    len = 0;
+
+    if (s && ap_escape_errorlog_item(scratch, s->server_hostname, MAX_STRING_LEN - len)) {
+        len += apr_snprintf(errstr + len, MAX_STRING_LEN - len, "%s ", scratch);
     } else {
-        len = 0;
+        len += apr_snprintf(errstr + len, MAX_STRING_LEN - len, "- ");
+    }
+
+    if (logf && ((level & APLOG_STARTUP) != APLOG_STARTUP)) {
+        errstr[len] = '[';
+        ap_recent_ctime(errstr + 1 + len, apr_time_now());
+        errstr[len + 1 + APR_CTIME_LEN - 1] = ']';
+        errstr[len + 1 + APR_CTIME_LEN    ] = ' ';
+        len += 1 + APR_CTIME_LEN + 1;
     }

     if ((level & APLOG_STARTUP) != APLOG_STARTUP) {

Place this into "/usr/ports/www/apache22/files/patch-server:log.c-ErrorLog?-ServerName?" to have ports patch automatically.

You can use a program such as vhostlog to handle the log splitting.