Ankündigung

Einklappen
Keine Ankündigung bisher.

Monolog

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Monolog

    Hallo Zusammen,

    ich arbeite mich gerade in php ein.

    Als erste Projekt habe ich mir vorgenommen, den Logger Monolog zum laufen zu bekommen. Das sollte mir in der Zukunft beim coden weiterhelfen

    Mein Code sieht wie folgt aus:

    PHP-Code:
    <?php

    spl_autoload_register
    (function ($class) {
        
    $file $__DIR__.'/relative/path/to/Monolog/src/'.strtr($class'\\''/').'.php';
        if (
    file_exists($file)) {
            require 
    $file;
            return 
    true;
        }
    });

        use 
    Monolog\Logger;
        use 
    Monolog\Handler\StreamHandler;

        
    $log = new Logger('name');
        
    $log->pushHandler(new StreamHandler(__DIR__.'/path/to/your.log'Logger::DEBUG));

        
    $log->addInfo('Do your magic here.');
    Das Setting:

    Ich habe zwei Wege für das Einrichten versucht:

    a)

    Code:
    php composer.phar require monolog/monolog
    b) "zu Fuß" Psr/Log und Monolog von Github geladen.

    /root
    -Psr/Log/
    -Monolog/
    -monolog.php

    Ich habe in beiden Varianten folgende Ausgaben bekommen:

    Code:
    Fatal error: Uncaught Error: Class 'Monolog\Logger' not found in /var/www/html/monologmanuell/monologmanuell.php:14 Stack trace: #0 {main} thrown in /var/www/html/monologmanuell/monologmanuell.php on line 14
    Code:
    Fatal error: Uncaught Error: Class 'Monolog\Logger' not found in /var/www/html/monolog/Monolog.php:14 Stack trace: #0 {main} thrown in /var/www/html/monolog/Monolog.php on line 14
    Hätte jemand eine Idee warum das Beispiel nicht funktioniert?

    Vielen Dank für eure Unterstützung.

    Grüße
    chris

  • #2
    Ich hoffe mal, dass du diese Zeilen nicht wirklich so übernommen hast:

    $file = $__DIR__.'/relative/path/to/Monolog/src/'.strtr($class, '\\', '/').'.php';
    $log->pushHandler(new StreamHandler(__DIR__.'/path/to/your.log', Logger::DEBUG));
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Danke uha,

      das war ein Copy&Paste-Fehler am Ende.

      Ich habe in der Zeile mehrere Möglichkeiten versucht:
      Code:
      $file = $__DIR__.'/Monolog/'.strtr($class, '\\', '/').'.php';
      
      $file = $__DIR__.'Monolog/'.strtr($class, '\\', '/').'.php';
      $file = $__DIR__.'Monolog\'.strtr($class, '\\', '/').'.php';
      $file = $__DIR__.'\Monolog\'.strtr($class, '\\', '/').'.php';
      ...

      Immer mit dem gleichem Ergebnis.

      Die 2. Stelle ist bei mir:

      Code:
          $log->pushHandler(new StreamHandler('/my.log', Logger::DEBUG));
      Nach meinem Verständnis, steiget er aber schon hier aus:

      Code:
      $log = new Logger('name');
      Danke euch

      Grüße
      chris

      Kommentar


      • #4
        Zitat von tuhpon Beitrag anzeigen
        Ich habe in der Zeile mehrere Möglichkeiten versucht:
        Code:
        $file = $__DIR__.'/Monolog/'.strtr($class, '\\', '/').'.php';
        
        $file = $__DIR__.'Monolog/'.strtr($class, '\\', '/').'.php';
        $file = $__DIR__.'Monolog\'.strtr($class, '\\', '/').'.php';
        $file = $__DIR__.'\Monolog\'.strtr($class, '\\', '/').'.php';
        ...
        Wie auch immer du da versuchst einen Pfad zusammen zu bekommen, so wird das nicht funktionieren.
        __DIR__ ist eine Konstante und keine Variable.

        Darüber hinaus könntest du den Fehler durch entsprechendes Debugging auch leicht eingrenzen.
        "Software is like Sex, it's best if it's free." - Linus Torvalds

        Kommentar


        • #5
          Ich habe zwei Wege für das Einrichten versucht:

          a)

          Code:

          Code:
           
           php composer.phar require monolog/monolog
          danach genügt das eigentlich
          PHP-Code:
          require __DIR__ '/vendor/autoload.php'
          statt dem selbstgebauten autoloader oben.
          https://php-de.github.io/jumpto/comp...nten-verwenden

          allerdings möchte ich deiner lernkurve nicht im wege stehen.

          Kommentar


          • #6
            Hallo,

            einen kleine Ergänzung noch dazu: Du solltest dir gleich angewöhnen, nur die Standard-Methoden zu verwenden, die da wären: debug, notice, info, warning, error, alert und emergency. Also kein addInfo oder sowas, denn das entspricht nicht der PSR-3 Schnittstelle!
            https://www.php-fig.org/psr/psr-3/


            MFG

            derwunner

            Kommentar


            • #7
              An alle: Vielen Dank.
              Ich kann von jedem Post von euch was Mitnehmen

              Ich hoffe ich komme bald in die Lernkurve und kann das Tal der Anungslosen verlassen

              Danke noch mal

              Viele Grüße
              chris

              Kommentar


              • #8
                Zitat von tuhpon Beitrag anzeigen
                An alle: Vielen Dank.
                Ich kann von jedem Post von euch was Mitnehmen
                Freut mich zu hören

                Zitat von tuhpon Beitrag anzeigen
                Ich hoffe ich komme bald in die Lernkurve und kann das Tal der Anungslosen verlassen
                Noch viel zu lernen du hast Das wird noch lange dauern. Selbst wenn du die paar Kontrollkonstrukte der Programmierung verstanden hast, fehlt dir vorallem noch Methoden der Softwareentwicklung. Wenn man nur programmieren kann und keine Ahnung von Konzepten hat, dann ist das Mist. Deswegen halte ich auch nichts von Büchern, die einem versprechen, dass man danach programmieren "kann". Solche Bücher beleuchten meistens wirklich nur das Programmieren und mit keinem Teil die Konzepte, wie man programmiert oder wie man seinen Code am besten in Schichten und sowas aufteilt.

                Kommentar


                • #9
                  Nachtrag:

                  Ich halte das Vorhaben
                  den Logger Monolog zum laufen zu bekommen
                  als Ersteinsteiger-Projekt für keine Empfehlung. Warum?

                  Monolog ist ein umfangreiches Klassenkonstrukt welches auf den Standard PSR-3 aufsetzt und in Punkto Universalität und Flexibilität das Thema Logger nahezu ausreizt.
                  Ist der Logger nur für das Loggen in Files wie im Eingangspost angedeutet gedacht, so ist das wie mit Kanonen auf Spatzen schießen. Für diesen Fall ist man mit einen eigenen kleinen Logger besser beraten.
                  Sollen ein Log zum Beispiel in eine Datenbank abgelegt werden, sind weitere Klassen zu erstellen, die dann auch die Standards einhalten müssen. Für Ersteinsteiger nicht mal so in ein paar Minuten umsetzbar.

                  Was das "Einrichten" betrifft ist für Monolog die konsequente Nutzung vom Composer inklusive dessen Autoloader angezeigt.
                  Eine "zu Fuß" Lösung ist hier nur zu empfehlen, wenn die Aneignung von Hintergrundwissen im Vordergrund steht.
                  Der obige Ansatz ist abgesehen von den schon genannten Fehlern schon deshalb nicht geeignet, da das Autoloading der Psr-Interfaces nicht berücksichtigt wurde.

                  Ich habe die "zu Fuß" Variante mal durchgezogen als weiterer Test für eine eigene Autoloaderklasse.
                  Ob eine solche Variante für eigene Applikationen sinnvoll ist muss jeder selbst beurteilen und soll hier nicht das Thema sein.
                  Die Verzeichnisstruktur wurde wie folgt gewählt:
                  Code:
                  html
                    +test
                      testmonolog.php
                    +class
                      autoload.php
                      +monolog
                        +src
                          +Monolog
                            + ..
                      +Psr
                        +log
                          Abstractlogger.php ..
                  Die Monolg und PSR-Files wurden als ZIP-Download geholt und 1:1 in die Verzeichnisse entpackt.
                  Als Basis dient das Skript vom Basic Usage in der Readme vom Monolog.

                  PHP-Code:
                  <?php

                  use Monolog\Logger;
                  use 
                  Monolog\Handler\StreamHandler;

                  error_reporting(-1);
                  ini_set('display_errors'1);
                  header('Content-Type: text/html; charset=UTF-8');

                  require 
                  __DIR__ "/../class/autoload.php";

                  $loader = new autoload("class.*.php,*.php");

                  //add autoloaderinfo
                  $loader->addNamespace('Monolog\\''monolog/src/Monolog');
                  $loader->addNamespace('Psr\\''Psr');

                  // create a log channel
                  $log = new Logger('name');

                  $log->pushHandler(new StreamHandler(__DIR__ '/mymonolog.log'Logger::WARNING));

                  // add records to the log
                  $log->warning('Foo');
                  $log->error('Bar');
                  Als Ergebnis werden 2 Einträge in der Datei mymonolog.log zugefügt. Der eigene Autoloader bietet die Möglichkeit, die geladenen Klassen zu Testzwecken aufzulisten.
                  Für das kleine Beispiel wurden allein 15 Files (Klassen, Interface und Traits) geladen.


                  Kommentar

                  Lädt...
                  X