Logging



  • Hallo!

    Ich arbeite erst seit kurzem mit dem BCB6, und ich habe nun schon ein kleines Programm mit MySQL Anbindung gemacht, was auch funktioniert.

    Nun soll ich noch ein Log dazu machen, welches alles was "passiert" mitloggt, und bei Bedarf in einem seperaten Fenster anzeigt.

    Man soll also sehen können welcher Query von welcher Tabelle und/oder Feld gemacht wurde, also ob z.B. ein Artikel geändert oder gelöscht wurde, oder ein neuer hinzu kam.

    Oder halt wenn sich ein Preis geändert hat, usw. usf.

    Mein Problem dabei ist nun, das ich gar keinen Ansatz habe um überhaupt anzufangen, deshalb wollte ich mal fragen ob mir jemand helfen könnte (zumindest um überhaupt mal anfangen zu können).

    Wie gesagt, es gibt etliche Tabellen mit jeweils etlichen Feldern, und es soll angezeigt werden was gerade passiert.

    Ich hoffe es kann mich jemand unterstützen.

    Danke schon mal.

    Nein es ist keine Hausaufgabe oder ein Uni-Projekt. 😃



  • Als Logging-Objekt würde ich eine Textdatei nehmen und im Append-Modus einfach vor (oder nach) jeder Query entsprechend eine Zeile eintragen (evtl. mit Datum und Uhrzeit).
    Und beim Anzeigen im Fenster dann einfach diese Textdatei einlesen.

    Jenachdem wie umfangreich das Logging wird, könntest du dann im nächsten Schritt z.B. jeden Tag eine neue Logging-Datei anfangen (d.h. das Datum im Dateinamen eintragen z.B. "Logging_20090815.txt").

    Wie du das Format der Logging-Datei aufbaust, mußt du dir natürlich noch überlegen (d.h. ob es eher technischer Natur oder doch menschenlesbarer sein soll).



  • Hmm, das Problem ist das es jetzt noch wenige Querys sind, aber im schon fertigen Programm sind es einfach zu viele um überall noch was dazu zu machen.

    Es sollte irgendwie alles Zentral abgefangen werden, also egal ob gerade was gelöscht wurde, was hinzugefügt wurde usw.

    Das Log soll so aufgebaut sein:

    Datenbank(bleibt ja eh immer die gleiche)->Tabelle->Feld->Query(also was gemacht wurde);

    Jetzt stellt sich mir halt die Frage wie ich das abfangen kann.



  • Dann mußt du deine Queries halt über eine zentrale Methode laufen lassen, die dann zusätzlich noch das Logging macht (evtl. noch Parameter mitgeben oder aus dem Query-String die Daten extrahieren).

    Bei anderen Datenbanken (MSSQL, Oracle oder PostgreSQL) könnte man evtl. noch Trigger dafür benutzen, aber dies geht m.E. bei MySQL nicht.



  • Ich versteh zwar was du meinst, aber ich hab keine Ahnung wie das Code mäßig aussehen könnte. 😞

    Könntest du mir bitte mal ein kleines Beispiel geben, nur damit ich mal nen Anfang habe. 🙂



  • deine_sql_query_func("Select blala from lala");
    

    ->

    deine_sql_query_und_log_func(String query)
    {
       deine_sql_query_func(query);
       log_func(String(time)+query);
    }
    

    greetz KN4CK3R



  • @ KN4CK3R:

    Sorry wenn ich mich doof anstelle, aber wie kann ich denn damit jedes Query abfangen?

    Ich glaub ich steh auf dem Schlauch (oder wir reden aneinander vorbei). 😃



  • du musst alle deine queryfunktionen mit dieser neuen queryundlogfunktion ersetzen.

    greetz KN4CK3R



  • Achso, ja, jetzt versteh ich es.

    Danke!



  • Ich sage auch: danke KN4CK3R -)

    Ich bin eigentlich davon ausgegangen, daß jemand der eine Datenbankanbindung programmieren kann, auch schon die Grundlagen von Funktionen kennt...



  • Th69 schrieb:

    Ich sage auch: danke KN4CK3R -)

    Ich bin eigentlich davon ausgegangen, daß jemand der eine Datenbankanbindung programmieren kann, auch schon die Grundlagen von Funktionen kennt...

    Wie gut das man nicht immer alles selber programmieren muss, sondern das es im BCB auch andere Möglichkeiten dazu gibt.

    Und ja, ich weiß was Funktionen usw. sind, und auch wie was funktioniert. Mir war nur nicht klar wie ich die ganzen Querys abfangen kann, und zwar alle, egal was grad ausgeführt wird.



  • Ich würde das Logging vor dem SQL Aufruf machen, wenn der SQL Aufruf eine Exception erzeugt hast du keine Ahnung, welcher Aufruf dafür verantwortlich war. Mit dem Loggen vor dem SQL Aufruf muss die letzte Zeile dann den Fehler verursacht haben und ist damit schnell identifiziert.


Anmelden zum Antworten