PHP: Quick Logging

Logging in PHPEigentlich bin ich nicht so der Freund von DO-IT-YOURSELF Lösungen, aber heute musste es schnell gehen. Es geht ums Logging in PHP. An dieser Stelle sei Log4PHP erwähnt. Wer mehr Zeit hat sollte unbedingt dieses oder ein anderes Logging-Framework von PHP (KLogger, Monolog, Log5PHP oder Analog) verwenden! (Hier ist der Link zum Quickstart)
Nun komme ich zu meiner 30-Zeilen-Lösung:

 

Die Logger – Klasse

<?php
class Logger
{
	public static $LOG_DEBUG = "DEBUG";
	public static $LOG_INFO = "INFO";
	public static $LOG_WARNING = "WARNING";
	public static $LOG_ERROR = "ERROR";
	
	
	//Logger::log("Nachricht", Logger::$LOG_DEBUG, __FILE__, __FUNCTION__, __LINE__);
	public static function log($message, $level, $datei, $methode, $line)
	{
		//Objekte serialisieren
		if(!is_string($message)){
			$message = serialize($message);
		}

		// Pattern
		$datum = date("d-m-Y H:i:s");
		//2012-07-25 11:00:15 DateiXY(43) - MethodeXY: LEVEL Die Nachricht
		$erg = $datum." ".$datei."(".$line.") - ".$methode.": ".$level." ".$message."\n";

		// Der erste Teil, also "log/", gibt den Speicherort an!
		$datei_handle = fopen("log/".date("d-m-Y").".log", "a+");
		fputs($datei_handle, $erg);
		fclose($datei_handle);
	}

}
?>

Nicht sehr spektakulär, aber extrem funktional!

 

Aufruf und Ausgabe

hier gibt es nicht viel zu sagen.
Der Aufruf

require_once dirname(__FILE__) . "/dateiMitderKlasseOben.php";
//...


Logger::log("Samsung Galaxy S3", Logger::$LOG_DEBUG, __FILE__, __FUNCTION__, __LINE__);
Logger::log(array("iPhone", "Galaxy", "iPad", "Amazon Fire 2"), Logger::$LOG_DEBUG, __FILE__, __FUNCTION__, __LINE__);

//...

Das Ergebnis

27-07-2012 13:45:42 C:\Dokumente und Einstellungen\meinUser\Desktop\projekt\src\function.php(23) - : DEBUG Samsung Galaxy S3
27-07-2012 14:03:58 C:\Dokumente und Einstellungen\meinUser\Desktop\projekt\src\function.php(24) - : DEBUG a:4:{i:0;s:6:"iPhone";i:1;s:6:"Galaxy";i:2;s:4:"iPad";i:3;s:13:"Amazon Fire 2";}

 

nette Features

  • Sehr informatives Pattern:-)
  • Man kann eine Meldung (String) oder ein Objekt, Array, etc. loggen
  • Jeden Tag wird eine neue Log-Datei angelegt (Kann beliebig angepasst werden: stündlich, wöchentlich, monatlich, usw.)
  • Es gibt verschiedene Log-Level

 

Erweiterung: Eine Log-Datei und bei 100 MB löschen und neuanfangen

Hier ist eine kleine Erweiterung meines Loggers:)

<?php
class Logger
{
	public static $LOG_DEBUG = "DEBUG";
	public static $LOG_INFO = "INFO";
	public static $LOG_WARNING = "WARNING";
	public static $LOG_ERROR = "ERROR";
	
	
	//Logger::log("Nachricht", Logger::$LOG_DEBUG, __FILE__, __FUNCTION__, __LINE__);
	public static function log($message, $level, $datei, $methode, $line)
	{
		//Objekte serialisieren
		if(!is_string($message)){
			$message = serialize($message);
		}

		// Pattern
		$datum = date("d-m-Y H:i:s");
		//2012-07-25 11:00:15 DateiXY(43) - MethodeXY: LEVEL Die Nachricht
		$erg = $datum." ".$datei."(".$line.") - ".$methode.": ".$level." ".$message."\n";

		// Pfad und Dateiname!
		$logFileName = "log/eineDatei.log";

		// Datei groesse einschraenken!
		$logsize = filesize($logFileName);
	   
	   // 100 MB - 104857600
	   if($logsize > 104857600){
		   $datei_handle = fopen($logFileName, "w+");
	   }else{
		   $datei_handle = fopen($logFileName, "a+");
	   }
	   
      fputs($datei_handle, $erg);
      fclose($datei_handle);
	}

}
?>

 

Bildquelle

  • Christian Seidel – pixelio.de

 

Copyright © 2012 AxxG – Alexander Gräsel




2 Antworten : “PHP: Quick Logging”

  1. Pascal sagt:

    Wofür hast du das so schnell gebraucht?

    Hat WordPress nicht ein eingebautes Logging was man nutzen kann?

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.