1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[PHP] SimpleLogger - Ein einfache Logger-Klasse

Jeder Entwickler sollte eine Logging-Infrastruktur besitzen

  1. saftmeister

    saftmeister Nutze den Saft! Premium-User

  2. c0mecl4rity

    c0mecl4rity Grünschnabel

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

    PHP:
    1. ...
    2. const EMERGENCY = 'emergency';
    3. const ALERT     = 'alert';
    4. const CRITICAL  = 'critical';
    5. const ERROR     = 'error';
    6. const WARNING   = 'warning';
    7. const NOTICE    = 'notice';
    8. const INFO      = 'info';
    9. const DEBUG     = 'debug';
    10. ...
    Also ich würde die Log-Level noch dementsprechend anpassen.
     
    saftmeister gefällt das.
  3. saftmeister

    saftmeister Nutze den Saft! Premium-User

    Danke, werde mir das mal zu Gemüte führen.
     
  4. saftmeister

    saftmeister Nutze den Saft! Premium-User

    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
     
    sheel gefällt das.
  5. Parantatatam

    Parantatatam mag Cookies & Kekse

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

    saftmeister Nutze den Saft! Premium-User

    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. demo1987

    demo1987 Mitglied

    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.
     
  8. saftmeister

    saftmeister Nutze den Saft! Premium-User

    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:

    Code (PHP):
    1. <?php
    2. // SimpleLogger einbinden:
    3. require 'SimpleLogger.php';
    4.  
    5. // hier kommt dein Code....
    6.  
    7. SimpleLogger::debug("Ich in eine Debugging-Zeile");
    8.  
    9. // und noch mehr code....
    10.  
    11. SimpleLogger::error("Ein Fehler ist aufgetreten");
     
  9. demo1987

    demo1987 Mitglied

    was hat es denn dann mit den logleveln auf sich? In diesem beispielen übergebe ich ja nur den message wert oder verstehe ich das falsch?
     
  10. SilentWarrior

    SilentWarrior Erfahrenes Mitglied

    Der ist im Funktionsnamen drin (im Beispiel debug bzw. error).
     
  11. saftmeister

    saftmeister Nutze den Saft! Premium-User

    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:

    Code (PHP):
    1. 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:

    Code (PHP):
    1. <?php
    2. require 'SimpleLogger.php';
    3.  
    4. // Einfache Verwendung einer Wrapper-Methode
    5. SimpleLogger::info("Initialisiere Anwendung\n");
    6.  
    7.  
    8. // Verwendung der Methode log();
    9. $aVariable = "Hier steht ein nicht besonders sinnvoller Text";
    10. SimpleLogger::log(SimpleLogger::DEBUG, $aVariable . "\n");
    11.  
    12.  
    13. // Verwendung der Methode dump() zum loggen von Variablen-Inhalten und -Typen
    14. $kreisRadius = 6; // in cm
    15. $bVariable = 3.14156 * $kreisRadius * 2;
    16. SimpleLogger::dump($bVariable . "\n");
    17.  
    18.  
    19. // Verwendung der Methode logException()
    20. try
    21. {
    22.   // Hier der Code, der eine beliebige Ausnahme abgeleitet von \Exception wirft:
    23.   throw new ErrorException("Etwas wirklich schreckliches ist passiert: sie haben Kenny getötet!", -6, null, __FILE__, __LINE__, null);
    24. }
    25. catch(Exception $ex)
    26. {
    27.   SimpleLogger::logException($ex);
    28. }
    Code (Text):
    1. 2015-02-08 08:53:05   [INFO ]: Initialisiere Anwendung
    2. 2015-02-08 08:53:05   [DEBUG]: Hier steht ein nicht besonders sinnvoller Text
    3. 2015-02-08 08:53:05   [DEBUG]: Contents of string
    4. '37.69872
    5. '
    6. 2015-02-08 08:53:05   [ERROR]: Exception ErrorException occured: Etwas wirklich schreckliches ist passiert: sie haben Kenny getötet!
    7. #0 {main}
    Grüße und viel Spaß
     
  12. Basti_2015

    Basti_2015 Mitglied

    hi, kann man diese ...
    PHP:
    1. // Verwendung der Methode logException()
    2. try
    3. {
    4.   // Hier der Code, der eine beliebige Ausnahme abgeleitet von \Exception wirft:
    5.   throw new ErrorException("Etwas wirklich schreckliches ist passiert: sie haben Kenny getötet!", -6, null, __FILE__, __LINE__, null);
    6. }
    7. catch(Exception $ex)
    8. {
    9.   SimpleLogger::logException($ex);
    10. }
    ... auch innerhalb von einer Klasse aufrufen? Also zum Beispiel, der Login oder DB Klasse?
     
  13. mermshaus

    mermshaus Erfahrenes Mitglied

    Da es sich bei SimpleLogger::logException um einen statischen Aufruf handelt: Ja, das müsste ohne weitere Anpassungen funktionieren.
     
    Basti_2015 gefällt das.
Die Seite wird geladen...