[PHP] SimpleLogger - Ein einfache Logger-Klasse

[PHP] SimpleLogger - Ein einfache Logger-Klasse

#2
Und dann wäre es schön, wenn diese Infrastruktur einem Standard folgt. ;)
http://www.php-fig.org/psr/psr-3/

PHP:
...
const EMERGENCY = 'emergency';
const ALERT     = 'alert';
const CRITICAL  = 'critical';
const ERROR     = 'error';
const WARNING   = 'warning';
const NOTICE    = 'notice';
const INFO      = 'info';
const DEBUG     = 'debug';
...
Also ich würde die Log-Level noch dementsprechend anpassen.
 

saftmeister

Nutze den Saft!
Premium-User
#4
Jetzt neu:

- Die PSR-Loglevel eingebaut
- Eine Funktion zum Dumpen von beliebigen PHP-Objekten hinzugefügt => dump() nutzt Loglevel DEBUG.
- Bugfixing beim evaluieren des übergebenen Levels
 

Parantatatam

mag Cookies & Kekse
#5
Was man noch schöner machen könnte, wäre diese Stelle in der Methode "log":
PHP:
else if ($level != self::DEBUG && $level != self::INFO && $level != self::NOTICE &&
  $level != self::WARNING && $level != self::ERROR && $level != self::CRITICAL &&
  $level != self::ALERT && $level != self::EMERGENCY)
{
  $level = self::ERROR;
}
Schöner wäre das hier:
PHP:
elseif ( $level & 255 === 0 ) {
  $level = self::ERROR;
}
Nachtrag: Um es noch eindeutig zu machen, könnte man auch noch eine Konstante self::ALL mit dem Wert 255 definieren.
PHP:
self::ALL = 255; # self:DEBUG | self::INFO | self::NOTICE | self:WARNING | self::ERROR | self::CRITICAL | self::ALERT | self::EMERGENCY
 
Zuletzt bearbeitet:

saftmeister

Nutze den Saft!
Premium-User
#6
Danke für die Anregung, die 2km-lange if-condition war mir auch schon ein Dorn im Auge ;-) Gut, dass da mehrere Leute drauf schauen. Wird in die nächste Version eingebaut.
 
#7
Kann man mir mal kurze Beispiel nennen wie ich das in meinen Skript nutze? Ich bin noch nicht so ein großer PHP Experte, würde aber ein Logging gerne schon von Anfang an einsetzen.
 

saftmeister

Nutze den Saft!
Premium-User
#8
Hallo, danke für das Interesse. Hier mal ein Beispiel. Ich gehe davon aus, dein Script liegt zusammen mit der SimpleLogger.php (mit dem Inhalt aus dem Artikel) im gleichen Ordner:

PHP:
<?php
// SimpleLogger einbinden:
require 'SimpleLogger.php';

// hier kommt dein Code....

SimpleLogger::debug("Ich in eine Debugging-Zeile");

// und noch mehr code....

SimpleLogger::error("Ein Fehler ist aufgetreten");
 

saftmeister

Nutze den Saft!
Premium-User
#11
Hi, sorry für das späte zurückmelden.

Wie SilentWarrior schon schrieb, werden die Log-Level automatisch an die Haupt-Funktion übergeben, sobald man eine der Wrapper-Funktionen wie "error()", "debug()" oder "info()" aufruft. Stattderer wäre es auch möglich, die Funktion "log()" mit den entsprechenden Parametern aufzurufen:

PHP:
SimpleLogger::log(SimpleLogger::error, "Ich bin eine Fehlermeldung");
Es ist bspw. auch möglich, Variablen-Inhalte zu loggen. Hier mal etwas Code und das Log, das dabei entsteht:

PHP:
<?php
require 'SimpleLogger.php';

// Einfache Verwendung einer Wrapper-Methode
SimpleLogger::info("Initialisiere Anwendung\n");


// Verwendung der Methode log();
$aVariable = "Hier steht ein nicht besonders sinnvoller Text";
SimpleLogger::log(SimpleLogger::DEBUG, $aVariable . "\n");


// Verwendung der Methode dump() zum loggen von Variablen-Inhalten und -Typen
$kreisRadius = 6; // in cm
$bVariable = 3.14156 * $kreisRadius * 2;
SimpleLogger::dump($bVariable . "\n");


// Verwendung der Methode logException()
try
{
  // Hier der Code, der eine beliebige Ausnahme abgeleitet von \Exception wirft:
  throw new ErrorException("Etwas wirklich schreckliches ist passiert: sie haben Kenny getötet!", -6, null, __FILE__, __LINE__, null);
}
catch(Exception $ex)
{
  SimpleLogger::logException($ex);
}
Code:
2015-02-08 08:53:05   [INFO ]: Initialisiere Anwendung
2015-02-08 08:53:05   [DEBUG]: Hier steht ein nicht besonders sinnvoller Text
2015-02-08 08:53:05   [DEBUG]: Contents of string
'37.69872
'
2015-02-08 08:53:05   [ERROR]: Exception ErrorException occured: Etwas wirklich schreckliches ist passiert: sie haben Kenny getötet!
#0 {main}
Grüße und viel Spaß
 
#12
hi, kann man diese ...
PHP:
// Verwendung der Methode logException()
try
{
  // Hier der Code, der eine beliebige Ausnahme abgeleitet von \Exception wirft:
  throw new ErrorException("Etwas wirklich schreckliches ist passiert: sie haben Kenny getötet!", -6, null, __FILE__, __LINE__, null);
}
catch(Exception $ex)
{
  SimpleLogger::logException($ex);
}
... auch innerhalb von einer Klasse aufrufen? Also zum Beispiel, der Login oder DB Klasse?