PHP Logdatei parsen mit regex..

lordfritte

Lieutenant
Registriert
Juli 2006
Beiträge
955
Hallo, ich habe wieder ein kleines Problem mit Regex.
Ich schreibe in eine Datei logs(mit Zend_Log), die haben folgendes Format:
Code:
2014-09-09T09:48:44+02:00 (INFO): Infomessage

diese möchte ich in ein Array parsen:
Code:
array(
	'time'	=> '2014-09-09T09:48:44+02:00',
	'level	=> 'INFO',
	'message=> 'Infomessage'
)

Natürlich habe ich jetzt die möglichkeit die Datei Zeilenweise zu lesen und mit substr, bzw. explode, durch zu gehen.
Aber ab und zu gibt es auch eine Exception:
Code:
2014-09-09T09:49:38+02:00 (ERROR): exception 'Exception' with message 'Test 123' in /home/tobh/public_html/myApp/lib/AdGen/Keyword.php:790
Stack trace:
#0 /home/tobh/public_html/myApp/lib/AdGen.php(218): AdGen_Keyword->save()
#1 /home/tobh/public_html/myApp/aw_generate_task.php(45): AdGen->generate()
#2 {main}
Und das sind jetzt schon mehrere Zeilen, also wäre es cool, wenn man einfach die ganze Datei am stück durch preg_match_all schickt.
 
Code:
$regex = '/([-:+T0-9]+\d?) \((.*?)\): (.*)/';
preg_match_all($regex,$string,$matches);
$daten = array(
	'time'	=> $matches[1],
	'level'	=> $matches[2],
	'message'=> $matches[3]
);
 
So wenig Eigeninitiative? Nun gut:
Code:
<?php
$string = file_get_contents("kurwa.log");
$daten = [];

$lines = explode("\n", $string);
foreach ($lines as $line) {
	$tokens = explode(" ", $line);
	
	$tokens[1] = trim($tokens[1], "():");
	$daten[] = [
		"time"		=> $tokens[0],
		"level"		=> $tokens[1],
		"message"	=> $tokens[2]
	];
}

var_dump($daten);
die();

// ======================= ODER ===================================

$regex = '/([-:+T0-9]+\d?) \((.*?)\): (.*)/';
$string = file_get_contents("kurwa.log");

$daten = [];

$lines = explode("\n", $string);

foreach ($lines as $line) {
	preg_match_all($regex, $line, $matches);
	$daten[] = [
		"time"		=> $matches[1],
		"level"		=> $matches[2],
		"message"	=> $matches[3]
	];
}

	
var_dump($daten);
die();

Ich empfehle die Variante mit explode & trim, weil => schneller.
 
Zurück
Oben