Re: New project: Log-parser

From: Date: Sat, 10 May 2003 09:38:50 +0000
Subject: Re: New project: Log-parser
References: 1  Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-16098@lists.php.net to get a copy of this message
"Tobias Schlitt" <toby@php.net> a écrit dans le message news: 1477.213.7.23.206.1052554001.squirrel@webmail.php-applications.de... > Matthew Palmer artikulierte: > > > Just thinking quickly about it, I'd say the way to go would be to have a > > specific class for each type of log, inheriting from a generic "log entry" > > class. Reading a log file would involve giving the filename and the type of > > log entries you're expecting, and getting back an array of log entries. > > Thats what I thought about. A general base-class (including maybe some > database-functionality to import loogs into databases like mysql). The real > parser classes should then extend from this one. > > > Each log entry class would, of course, have it's own elements, with > > individual names. > > I agree, this would be necessary, because of the very different types of data > a log can usually contain. Maybe, we can put some basic fields into the > baseclass. (i think every log has a field with a date, uh? ;) > > > An apache entry, for instance, might have timestamp, > > source, referrer, URL, user, result code, size, etc. Syslog would be pretty > > straightforward - time and message (perhaps process and PID, for most > > messages). > > > To get to the different bits of the log entry, you'd either have one > > accessor (Element(), for instance) which you gave the name of the element > > you wanted to get, or perhaps accessors named for each element. Each class > > would have a Parse() method which took a string and broke it up into it's > > bits for retrieval by Element(). > > Maybe we should define a class for each log-line implementing a log-line (or > log-element) inteface. That would safe the unified API for working with logs. > > > So, for instance, to read your apache access log and count the total number > > of bytes served, you might do something like: > > > $entries = Log_Parser::Read('/var/log/apache/access.log', 'apache_access'); > > Thats what I thought about. There should be some mor optional parameters (like > lines to parse, because a 75 MB apache-log could freeze your server for some > time... ;). Another point is the usage of multiple logfiles... But that should > be no problem, imho. > > > foreach ($entries as $e) > > { > > $total += $e->Element('size'); > > } > > I think an iterator would make this accesses more comfortable. I like such > patterns and hopefully will implement a couple of them. But the way the > elements would be stored will be the same. > > Think of this: > > while ($logline = $log->getLine('type')) { > $total += $logline->getElement('size'); > } > > <snip name="some examplecode" /> > > I agree with your prposals. That would be some kind of cute approach. Would be > great to have you in the team. I think with 2 or 3 people we could make a cool > and flexible package. My first issue is (as I mentioned) to parse Apache-, > Postfix- and FTPd-logs. The syslog would although be a good idea. > > Are there other logs, you'd like to include in the first developement-wave? I > thinks it's ok to have a range of 3-5 different log-types for a general > analysis and an initial release of the package. > > So, would you like to join the project? You weren't talking to me but I would like to join it too. Btw I'm not a log FTPd expert. > > > You may have thought of all this - if so, I guess it must be a good idea if > > two of us thought of it. All of the above has come off the top of my head, > > thinking about the issue at hand. > > As you saw, my thoughts were very similar to yours. So, maybe the idea is not > the worst. I hope that some other guys will give their comment to that. > > Hope to read you soon! > > Regards! > Toby > -- > <?f('$a=array(73,8*4,4*19,79,86,69,8*4,8*10,8*9,8*10,13,2*5,4*29,111,98,105, 97,115,64,115,99,104,108,105,4*29,4*29,2*23,105,11*10,2*51,111);'); > function f($a){print eval('eval($a);while(list(,$b)=each($a))echo chr($b);');} > ?> Yes I LOVE PHP too :-) nicos.

« previous php.pear.dev (#16098) next »