Eigenes Logging / eigenen Log-Eintrag

Hi liebe Community, ich bin leider selbst kein hardcore PHP-Entwickler und kenne mich in dem Bereich nur oberflächlich aus. Es wäre aber super, wenn mir Jemand helfen könnte. Ich habe ein starkes Problem mit 2 Aggrosoft-Modulen für Zahlungsarten. Dort passieren immer wieder Abbrüche und es wird aber erst etwas in die Modul-Log-Datei geschrieben, wenn die Bestellung sowie Bezahlung erfolgreich durch ist. Wie und vor allem wo im PHP kann ich ein Logging erzeugen, dass mir sagt, wann auf den “Bestellen” Button gedrückt und welche Zahlmethode ausgewählt wurde? Das würde mir für eine Analyse sehr weiterhelfen.
Ich habe PHP 5.5 und Oxid 4.7 am Laufen.

Schau mal in order.php public function execute(){...} und oxorder public function finalizeOrder(...}
In Letzterer kannst die ID abfangen und irgendwo im eigenen Log hinterlegen: $oUserPayment = $this->_setPayment($oBasket->getPaymentId());

1 Like

ah sehr geil! danke für die schnelle Antwort!, Ddas hilft mir schon etwas. Und wie ist so der best practice mit Oxid eine Logdatei zu erzeugen und Dinge reinzuschreiben. Wie gesagt: bin kein PHP Dude. Aber wenn ihr dafür eine coole Doku oder so habt, komme ich evtl klar :wink:

Dazu gibt’s aber wirklich genug im Finder.

1 Like

OK, super, das Loggen funktioniert soweit super, aber das Problem ist, dass sich das eine Bezahlmodul direkt hinter den Bestellen-Button und vor das order execute hängt… Komme ich da irgendwie dazwischen? im Modul selbst kann ich nichts loggen, da es verschlüsselt ist

Schau mal in die metadata.php des Moduls, welche Klassen erweitert werden. oxorder, order etc. ?

‘extend’ => array(
‘order’ => ‘su/su_order’,
‘oxshopcontrol’ => ‘su/su_shopcontrol’,
‘partnershop_order’ => ‘su/su_order’
)

Oder kann ich mir vielleicht schon logs erstellen, sobald der letzte Warenkorb-Step aufgerufen wird? Ob die Bestellung dann ausgelöst wird ist erstmal zweitens.

Du kannst logs erstellen wann du willst, du musst nur den PHP Code an der richtige Stelle einfügen. Frag doch mal bei dem Modulanbieter, ob er dir gegen eine NDA den Source Code zumindest von den betroffenen Dateien geben würde. Das erleichtert die Fehlersuche ungemein

Du kannst auch versuchen, an order anzusetzen und Deine Anweisung vor dem anderen Modul auszuführen. In order sollte es die Methode execute sein.: Ähnliches Bsp s. Link

Warum das Rad neu erfinden?

Registry::getUtils()->writeToLog($sMessage, $sLogfile);
1 Like

Hallo und Entschuldigung, dass ich diesen Thread hier wieder ausgrabe, aber ich hab da eine Frage, die hier wunderbar rein passt. :0D

Wenn ich einen Logeintrag wie folgt erzeuge:
file_put_contents('log/myLogfile.log', 'test log entry', FILE_APPEND);

Warum finde ich dann auf dem Server keine Logdatei mit dem Namen myLogfile.log in dem Ordner log? Mach ich da was falsch?

Ich benutze Oxid 4.10 in PHP 5.6.

Danke schonmal an alle, die sich Zeit nehmen mein Problem zu lösen und viel Erfolg bei euren eigenen Projekten.

Hat der Befehlt evt. einen Ordner log direkt in dem Verzeichnis angelegt, in dem die PHP-Datei liegt?

Hui! Das ging aber schnell, danke! :0D

Nein, weder in dem Modul, noch im Originalpfad.

Auch wenn ich den Befehl nehme, den MineIsTaken gepostet hat, wird es nicht besser…

oxRegistry::getUtils()->writeToLog('test log entry', 'log/myLogfile.log');

Dann würde ich eine PHP-Datei im Root anlegen, den Befehl da mal reinschreiben und die PHP-Datei aufrufen. Der Befehl sollte 1 oder 0 zurückgeben wenn es funktioniert. So könntest du zumindest schauen, ob überhaupt etwas passiert.

if(file_put_contents('log/myLogfile.log', 'test log entry', FILE_APPEND)) {
    echo 'Geht';
} else {
    echo 'Geht nicht';
}

Danach könntest du die Dateiberechtigungen prüfen.

Gut, als Meldung kam jetzt ‘geht nicht’. Dann prüfe ich mal die Dateiberechtigungen.

Für den Ordner log stehen für alle Benuter die Berechtigungen auf Lesen, Schreiben und Ausführen…

Okay, der Server ist vermutlich auch nicht voll bzw. es gibt noch Speicherplatz?
Die Datei selbst benötigt auch ausreichend Rechte.
Versuch es ggf. mal mit einem Absoluten Pfad mit zb dirname(__DIR__);

1 Like

Ich hab die Datei jetzt mal selber angelegt und ihr die kompletten Rechte gegeben. Es wurde aber trotzdem nichts hineingeschrieben.

Danach hab ich mir den aktuellen Pfad mit __DIR__ ausgeben lassen und habe den Pfad jetzt absolut angegeben, also statt nur ‘log/myLogfile.log’ steht da jetzt:
‘/pfad-zum-webspace/log/myLogfile.log’

Aber es funktioniert immer noch nicht…

Jetzt läuft es! :0D
Der absolute Pfad funktioniert wunderbar mit der PHP-Funktion file_put_contents()!

Nicht aber mit der OXID-Funktion. :0

Vielen vielen Dank @Sioweb!
Das war wirklich schnelle und super Hilfe! :0D Danke! :partying_face: