Time for another installment of the AccessLogUtil, this time the parser is
( nearly ) done and handles most of the possible entries that the apache
mod_log_config does are present ( including filtering an entry based on
status code and parameters to a particular entry type ). The docs for that
module are at:
http://httpd.apache.org/docs/mod/mod_log_config.html
The stuff that I have questions about or haven't implemented yet are as
follows:
%...c:Connection status when response is completed.
'X' = connection aborted before the response completed.
'+' = connection may be kept alive after the response is
sent.
'-' = connection will be closed after the response is sent.
Notes:
* I'm not sure exactly where I would grab the connection aborted
case from ( mostly this was a low priority item, I will dig
through the code and try to locate that a little later ).
%...{FOOBAR}e: The contents of the environment variable FOOBAR
and
%...{Foobar}n: The contents of note "Foobar" from another module.
and
%...P: The process ID of the child that serviced the request.
Notes:
* I don't know these are meaningful/useful in this particular
environment.
%...{Foobar}o: The contents of Foobar: header line(s) in the reply.
Notes:
* This is present *but* response headers that are set internally
( Content-Length and Content-Type are two I ran up against so
far ) aren't yet available. I can fix this in the parser if these
two are the only response headers that get snagged by this.
%...s:Status. For requests that got internally redirected,
this is the status of the *original* request ---
%...>s for the last.
Notes:
* Not sure exactly what the > would mean in this particular
environment, if I'm reading it correctly this is done by
default the way this is implemented but I don't think I am
reading this correctly.
%...{format}t: The time, in the form given by format, which should
be in strftime(3) format. (potentially localized)
Notes:
* For now this actually would take a java.text.SimpleDateFormat
style format. If needed I might be able to parse strtime
formats too but...one thing at a time. I've also added a
shortcut ISO for ISO style timestamp output
"-MM-dd HH:mm:ss (+|-)offset".
%...T: The time taken to serve the request, in seconds.
Notes:
* Not implemented yet, I'm still trying to figure out a clean
or sane way to do this. So far it looks like the most
straightforward way I've looked at would be to have the
calling valve invoke a 'beforeResponse()' and
'afterResponse()' method but that seems like something of
an ugly solution.
%...v: The canonical ServerName of the server serving the request.
%...V: The server name according to the UseCanonicalName setting.
Notes:
* Is this distinction meaningful in this environment? Right now
the values returned are identical.
I hope this is a fairly useful utility class, the next steps I will
probably take include:
1) Test and retest the parser.
2) Hopefully clarify the items included above and fix.
3) Add additional items available in tomcat but not in mod_log_config.
4) Add a second configuration method that allows the client of this class
to add arbitrary items by name and store a foreign name for that item
( mostly useful for JDBCAccessLog ).
In addition I have some minimal syslog client code sitting around
gathering dust, I know one or two people have requested syslog logs
and access logs. If someone wants I can clean this code up and create
a org.apache.catalina.logger.SyslogLogger class.
One last note: while looking around in AccessLogValve I noticed a
peculiarity in the way the first file opened always lacked the date
stamp. The patch for that is attached.
Thanks for your patience ( this email is a bit lengthy I know ), again any
ideas/critiques/pointers are more than welcome.
David Weinrich
--- AccessLogValve.java Fri Jan 12 22:59:34 2001
+++ AccessLogValveEd.java Fri Jan 12 22:58:04 2001
@@ -528,7 +528,6 @@
if (!dateStamp.equals(tsDate)) {
synchronized (this) {
close();
-dateStamp = tsDate;
open();
}
}
@@ -572,6 +571,10 @@
dir = new File(System.getProperty("catalina.home") +
File.separator + directory);
dir.mkdirs();
+
+// set the dateStamp here, avoiding the creation of a dateStamp-less
+// log the first day of use...
+dateStamp = dateFormatter.format(currentDate);
// Open the current log file
try {
TestAccessLogValve.java
AccessLogUtil.java
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED