Sven: Error Log auf Server

Hallo,

auf meinem Server ist ein log-Verzeichnis, aber z.b. php-Fehler werden dort gar nicht geloggt. Es stehen lediglich ein paar wenige Apache-Medlungen drin.

Des access-log aus demselben Verzeichnis ist ordentlich gefüllt, der funktioniert also.

Muss ich meinem php-Script oder der php.ini noch irgendwie klarmachen, dass php-Fehler dort hinein geschrieben werden?

Sven

  1. Servus!

    Hallo,

    auf meinem Server ist ein log-Verzeichnis, aber z.b. php-Fehler werden dort gar nicht geloggt. Es stehen lediglich ein paar wenige Apache-Medlungen drin.

    Des access-log aus demselben Verzeichnis ist ordentlich gefüllt, der funktioniert also.

    Muss ich meinem php-Script oder der php.ini noch irgendwie klarmachen, dass php-Fehler dort hinein geschrieben werden?

    Ja.

    PHP/Tutorials/Einstieg/Fehlerbehandlung

    Herzliche Grüße

    Matthias Scharwies

    --
    Jemand interessiert? Ein Freund von uns will zum Forumstreffen, und hat bereits Hotelübernachtungen gebucht.
    Er hat vergessen, dass er im gleichen Zeitraum auch heiratet.
    Also für Interessierte: Du könntest am 25. November um 14 Uhr im Rathaus von Hannover heiraten.
    Ihr Name ist Sandra.
  2. Hallo Sven,

    welche Werte haben die INI-Einstellungen log_errors und error_log?

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hallo Rolf (und dank auch an Matthias),

      ich habe sie jetzt so eingestellt und es scheint zu funktionieren:

      
      error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED
      log_errors = On
      error_log = /home/USER/phperror.log
      
      

      Eigentlich würde mir reichen, wenn die Fatal Errors und die DEPRECATED geloggt würden.

      Sven

      1. Hallo Sven,

        die E_-Konstanten stehen hier.

        Du hast zwei Möglichkeiten, die error_reporting Maske aufzubauen.

        (a) Subtraktiv - das ist das, was Du machst. E_ALL & ~E_WARNING nimmt alle Fehler und löscht darin das Bit für E_WARNING (UND-Verknüpfung mit der invertierten Maske für E_WARNING).

        (b) Additiv - dazu verknüpfst Du die Fehlerbits, die Du möchstest, mit dem | Operator (oder). Zum Beispiel:

        error_reporting = E_ERROR | E_DEPRECATED
        

        Ich würde aber E_CORE_ERROR, E_COMPILE_ERROR und E_USER_ERROR auch hinzunehmen.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Danke Rolf,

          wenn ich die Fehler in die normale error.log eintragen würde, hätte ich die Gewähr dafür, dass jeden Tag eine neue Dtei erstellt wird, richtig?

          Und jetzt? Muss ich das selber machen? Wäre ja kein Problem, ich muss es nur wissen.

          Sven

          1. Hallo Sven,

            hätte ich die Gewähr dafür, dass jeden Tag eine neue Dtei erstellt wird, richtig?

            Das tut PHP von sich aus nicht, das musst Du selbst steuern.

            Das PHP Manual schreibt aber noch zur error_log Einstellung:

            If this directive is not set, errors are sent to the SAPI error logger. For example, it is an error log in Apache or stderr in CLI. See also error_log().

            Möglicherweise bietet der Apache Möglichkeiten, wie man SAPI Fehlerausgaben steuern kann. Da kenne ich mich nicht aus. Aber wenn ich so google, scheint es, als würde PHP dann in den Apache Log schreiben.

            Rolf

            --
            sumpsi - posui - obstruxi
            1. Hallo Rolf,

              Das tut PHP von sich aus nicht, das musst Du selbst steuern.

              Nagut, dafür gibt es ja cronjobs.

              Das PHP Manual schreibt aber noch zur error_log Einstellung:

              If this directive is not set, errors are sent to the SAPI error logger. For example, it is an error log in Apache or stderr in CLI. See also error_log().

              Möglicherweise bietet der Apache Möglichkeiten, wie man SAPI Fehlerausgaben steuern kann. Da kenne ich mich nicht aus. Aber wenn ich so google, scheint es, als würde PHP dann in den Apache Log schreiben.

              Gestern habe ich es ausprobiert, ohne die Datei anzulegen.
              Sie wurde erstellt.

              Sven

              1. Gestern habe ich es ausprobiert, ohne die Datei anzulegen.
                Sie wurde erstellt.

                Ups. Der Apache Webserver (Benutzer oft „www-data“, UID 33, GID 33) kann also in Deinem Benutzerordner herumschreiben? Das klingt nicht so, als wäre das eine sichere Konfiguration.

                1. Gestern habe ich es ausprobiert, ohne die Datei anzulegen.
                  Sie wurde erstellt.

                  Ups. Der Apache Webserver (Benutzer oft „www-data“, UID 33, GID 33) kann also in Deinem Benutzerordner herumschreiben? Das klingt nicht so, als wäre das eine sichere Konfiguration.

                  Das Verzeichnis war nur ein Beispiel.
                  Er schreibt es in ein Unterverzeichnis meines /home - Verzeichnisses.

                  Sven

                  1. Gestern habe ich es ausprobiert, ohne die Datei anzulegen.
                    Sie wurde erstellt.

                    Ups. Der Apache Webserver (Benutzer oft „www-data“, UID 33, GID 33) kann also in Deinem Benutzerordner herumschreiben? Das klingt nicht so, als wäre das eine sichere Konfiguration.

                    Das Verzeichnis war nur ein Beispiel.
                    Er schreibt es in ein Unterverzeichnis meines /home - Verzeichnisses.

                    Das ist weit weg von perfekt. Und genau was ist ein „Unterverzeichnis meines /home - Verzeichnisses“?

                    1. [Das ist weit weg von perfekt.]

                      Erzähl...

                      (https://forum.selfhtml.org/self/2023/oct/30/error-log-auf-server/1811423#m1811423) Und genau was ist ein „Unterverzeichnis meines /home - Verzeichnisses“?

                      Sekunde?
                      Du kannst damit nichts anfangen, weißt aber schonmal, dass das Mist ist?

                      Bin auf Deine weiteren Erläuterungen gespannt. Ich bin ja kien "Server-Administrator", sondern miete nur Webspace, aber vielleicht kann ich mit Deiner Hilfe die Administratoren ja in ihrem Job korrigieren.

                      Tzzz... wenn man nicht alles selber macht. 😉

                      1. Und genau was ist ein „Unterverzeichnis meines /home - Verzeichnisses“?

                        Du kannst damit nichts anfangen, weißt aber schonmal, dass das Mist ist?

                        Vorliegend? Ja. Ich bin mir da sicher: Dort ein Logfile eines Dienstes anzulegen ist, wenn man es in Deinen Worten sagen will: „Mist“. In meinen Worten „weit weg von perfekt“. Ein hinreichend verständiger und mit ausreichendem Fachwissen gesegneter Dritter könnte es auch für „keine wirklich gute Idee“ halten.

                        Bin auf Deine weiteren Erläuterungen gespannt.

                        Warum? Dazu habe ich schon ausgeführt.

                        1. Guten Morgen, R.Willi,

                          Du kannst damit nichts anfangen, weißt aber schonmal, dass das Mist ist?

                          Vorliegend? Ja. Ich bin mir da sicher: Dort ein Logfile eines Dienstes anzulegen ist, wenn man es in Deinen Worten sagen will: „Mist“. In meinen Worten „weit weg von perfekt“. Ein hinreichend verständiger und mit ausreichendem Fachwissen gesegneter Dritter könnte es auch für „keine wirklich gute Idee“ halten.

                          Es gibt auch unterhalb von /var ein log Verzeichnis.
                          Dort stehen aber nicht meine access-log, error-log, usw. drin. Stattdessen hat der Provider unterhalb von /home ein weiteres Log-Verzeichnis eingerichtet, in der diese Dinge zu finden sind.

                          Er wird wohl einen Grund dafür gehabt haben, der über "keine Ahnung" hinaus geht?

                          Warum? Dazu habe ich schon ausgeführt.

                          Nagut, aber ob er lograte auf die vorliegenden Bedürfnisse eingerichtet hat, weißt Du ja nicht.

                          Sven

                          1. Er wird wohl einen Grund dafür gehabt haben, der über "keine Ahnung" hinaus geht?

                            Er war der Auffassung, dieses löse ein Problem. Ich denke, er hat neue geschaffen.

                            Hintergrund dürfte sein, dass den Apache zwecks Rechte-Abgrenzung mit „suexec“ fährt, und das er zugleich den Kunden, die auf seinem Server (also nicht „Deiner“ - ich hatte danach gefragt!) ihre jeweiligen Websites hosten, Error-Logs „in realtime“ zur Verfügung stellen will, statt diese (wie meiner) erst auszufiltern und nach Mitternacht zur Verfügung zu stellen.

                            „Ideal“ erscheint seine „Lösung“ nicht und wahrscheinlich (hoffentlich) ist das, was Du für ein „Unterverzeichnis Deines /home - Verzeichnisses“ hältst, ein Link oder bind-mount (gemountetes Verzeichnis)

                            Ich hätte das anders gemacht(¹). Aber in dem Fall hat jede Lösung Vor- und Nachteile. Mein Hoster hatte bis zu meinem Hinweis (das war „anno Asbach“) eine, bei der konnte jeder Kunde die Logs der anderen lesen. Das hab ich damals als Sicherheitsleck bezeichnet.

                            Nagut, aber ob er lograte auf die vorliegenden Bedürfnisse eingerichtet hat, weißt Du ja nicht.

                            Mit „mein Server“ hast Du mich sogar auf die falsche Fährte geführt.


                            ¹)

                            Kleines Skript, welches das Error-Log „durch grep jagt“ und so jedem Kunde nur seine Daten liefert, als Web-Anwendung im Kundenbereich.

                            1. Hintergrund dürfte sein, dass den Apache zwecks Rechte-Abgrenzung mit „suexec“ fährt, und das er zugleich den Kunden, die auf seinem Server (also nicht „Deiner“ - ich hatte danach gefragt!) ihre jeweiligen Websites hosten, Error-Logs „in realtime“ zur Verfügung stellen will, statt diese (wie meiner) erst auszufiltern und nach Mitternacht zur Verfügung zu stellen.

                              Aber gerade realtime-logs sind für mich schon wichtig.

                              „Ideal“ erscheint seine „Lösung“ nicht und wahrscheinlich (hoffentlich) ist das, was Du für ein „Unterverzeichnis Deines /home - Verzeichnisses“ hältst, ein Link oder bind-mount (gemountetes Verzeichnis)

                              Ich hätte das anders gemacht. Aber in dem Fall hat jede Lösung Vor- und Nachteile. Mein Hoster hatte bis zu meinem Hinweis (das war „anno Asbach“) eine, bei der konnte jeder Kunde die Logs der anderen lesen. Das hab ich damals als Sicherheitsleck bezeichnet.

                              Sowas in der Art hatte ich vor xy Jhren auch mal, und das bei einem "der Großen", die es wirklich besser hätten wissen und kölnnen müssen.
                              Dort konnte ich wirklich in die Verzeichnisstruktur anderer Kunden hinein und die natürlich auch in meine.

                              Nagut, aber ob er lograte auf die vorliegenden Bedürfnisse eingerichtet hat, weißt Du ja nicht.

                              Mit „mein Server“ hast Du mich sogar auf die falsche Fährte geführt.

                              Einverstanden.
                              Liegt daran, dass virtuelle managed Server auch bei den Providern oft einfach "Ihr Server" genannt werden.

                              Sven

                      2. aber vielleicht kann ich mit Deiner Hilfe die Administratoren ja in ihrem Job korrigieren.

                        Irgendwie deucht mir, dass Du davon ausgehst, dass die alles richtig machen. Aber es liegt durchaus im Bereich des Denkbaren und tatsächlich Möglichen, dass ich aus nicht bei mir liegenden Gründen(¹) nicht genug Zeit hatte, denen alles beizubringen.


                        ¹) Da spielt auch Geld eine Rolle.

                        1. Irgendwie deucht mir, dass Du davon ausgehst, dass die alles richtig machen. Aber es liegt durchaus im Bereich des Denkbaren und tatsächlich Möglichen, dass ich aus nicht bei mir liegenden Gründen(¹) nicht genug Zeit hatte, denen alles beizubringen.

                          😅

                          Nein, ich gehe nur davon aus, dass sie es besser wissen als ich.

  3. auf meinem Server

    Mit dem „meinem“ ist das so eine Sache. Hast Du Root-Rechte?

    (an anderer Stelle)

    error_log = /home/USER/phperror.log

    Beachte bitte, dass Du damit das Logfile an einer nicht erwarteten Stelle schreibst. logrotate wird also diese Datei nicht bearbeiten - es sei denn Du konfigurierst auch diesen Dienst.

    Sonst kann es passieren, dass Dein Error-Log sämtlichen verfügbaren Platz auf dem Server „frisst“. Da muss nur ein Skript „durchzudrehen“, dann geht das überraschend schnell.

    Logisch und einfach wäre aber:

    error_log = /var/log/apache/phperror.log