Jump to content


Photo

Log parsing...


  • Please log in to reply
2 replies to this topic

#1 TimoVlot

TimoVlot
  • Members
  • Pip
  • Newbie
  • 2 posts

Posted 28 February 2006 - 01:49 PM

Right so I want to parse a ascii log generated by EQ2 and do some statistics etc on the resulting data.

A snip from the log file looks as follows:

(1140157349)[Fri Feb 17 06:22:29 2006] Logging to 'logs/ServerName/eq2log_Character.txt' is now *ON*
(1140157367)[Fri Feb 17 06:22:47 2006] You start fighting.
(1140157367)[Fri Feb 17 06:22:47 2006] YOU hit a Bitterwind pioneer for 126 points of piercing damage.
(1140157370)[Fri Feb 17 06:22:50 2006] a Bitterwind pioneer's Ball of Fire hits YOU for 260 points of heat damage.
(1140157375)[Fri Feb 17 06:22:55 2006] a Bitterwind pioneer hits YOU for 91 points of crushing damage.
(1140157377)[Fri Feb 17 06:22:57 2006] YOUR Crushing Anvil hits a Bitterwind pioneer for 89 points of crushing damage.
(1140157423)[Fri Feb 17 06:23:43 2006] You have killed a Bitterwind pioneer.
(1140157423)[Fri Feb 17 06:23:43 2006] You stop fighting.

There is alot of useless banter in amogst those lines as well but I don't need thos, so I cut them from the overview.

I need to do a few things with this file:
1. Extract that line that says "Logging to .....*ON*", and extract the "Character" from it (this changes depending on who is logged in).
2. Replace all the "YOU" and "YOUR" with the name of the person who is logged in.


I then need to fill 2 tables. 1 with the damage data, and one with the fight data. The fight table will be something like:
fight_id|start_time|end_time

The start time would be "1140157367" in the example above, so I need to grab the numeric between () at the start of the line that contains the text "You start fighting". The end time would be the numeric between () at the start of the line that contains the test "You stop fighting".

I'm havign some issues figuring out how to actually grab that number. Should I do some sort of rexexp that finds "You start fighting" and then drop the whole line except the numeric? Or are there better ways?

The other table with the damage would do a simular thing per line, splitting it up into the needed fields, so once I find a solution for the start/end of a fight I should be able to port that to the other data.

I know this is vague and has no code at all, but as I can't see how to start doing this I haven't started coding at all :(

I had a look at a BBCode editor I have written for another site, to see if I can adapt that. But appart from the way it handles the data - in this case from a from - by stuffing it into a variable and then converting parts, which could be used to replace You/Your, I don't see how this code helps me much...

Does anyone have a sugestion on how to go about this? Or a pointer at what docs I might want to read?



#2 kanikilu

kanikilu
  • Members
  • PipPip
  • Member
  • 29 posts
  • LocationDallas, TX

Posted 28 February 2006 - 07:14 PM

The following should search the log file and extract the character name, start time, and end time:

<?php
$log = 'log.txt';
$lines = file($log);

foreach ($lines as $line) {
    if (preg_match('/eq2log_([A-Za-z0-9]+)\.txt/', $line, $matches)) {
        $characterName = $matches[1];
    }
    if (preg_match('/\bYou start fighting\b/', $line)) {
        if (preg_match('/^\([0-9]+\)/', $line, $matches)) {
            $startTime = preg_replace(Array('/\(/', '/\)/'), '', $matches[0]);
        }
    }
    if (preg_match('/\bYou stop fighting\b/', $line)) {
        if (preg_match('/^\([0-9]+\)/', $line, $matches)) {
            $endTime = preg_replace(Array('/\(/', '/\)/'), '', $matches[0]);
        }
    }
}

echo "Name: $characterName";
echo '<br>';
echo "Start Time: $startTime";
echo '<br>';
echo "End Time: $endTime";
?>
Not really sure about the rest, but this may get you pointed in the right direction...

#3 TimoVlot

TimoVlot
  • Members
  • Pip
  • Newbie
  • 2 posts

Posted 01 March 2006 - 04:32 PM

[!--quoteo(post=350329:date=Feb 28 2006, 07:14 PM:name=kanikilu)--][div class=\'quotetop\']QUOTE(kanikilu @ Feb 28 2006, 07:14 PM) View Post[/div][div class=\'quotemain\'][!--quotec--]
The following should search the log file and extract the character name, start time, and end time:
...
Not really sure about the rest, but this may get you pointed in the right direction...
[/quote]

Works great thanx! I took your code and startled fiddeling to get the other lines parsed. So far I've managed to get the "YOU hit" line down to the bare data I need. A bit more fiddeling and this should be done as I need. :)

Thanx loads




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users