AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Log-Datei realisieren

Ein Thema von MatthiasR · begonnen am 8. Nov 2007 · letzter Beitrag vom 8. Apr 2016
Antwort Antwort
Seite 3 von 5     123 45      
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#21

Re: Log-Datei realisieren

  Alt 9. Nov 2007, 14:22
Zitat von marabu:
Hallo Leute,

ein logfile soll ja für einen bestimmten Zeitraum ein lückenloses Protokoll der Aktionen oder Ereignisse im Leben eines Programms liefern. Wenn das Protokoll wichtig ist, dann muss es lokal geschrieben werden, da bei einer instabilen Netzwerkverbindung ein Entscheidungsproblem entsteht: Muss der Client jetzt seine Arbeit einstellen. In einem Client-Server-Scenario lässt man den Server protokollieren. Schreiben die Clients eigene lokale Protokolle, dann ist eine übergreifende Auswertung durch Zusammenführen der logfiles möglich, auch wenn ich mir die Notwendigkeit gerade nicht vorstellen kann.

Grüße vom marabu
Hallo marabu,

der Einwand ist durchaus berechtigt. Ich würde das Logfile sowohl lokal als auch auf dem Server schreiben (zumindest dort natürlich ergänzt um die Client Identifikation), weil das immer noch die einfachste Variante ist. Findet man im Serverlog keine Einträge mehr, kann man im Clientlog nachschauen.

Für die aktuelle Diskussion ist das ziemlich irrelevant, solang noch nicht einmal das Schreiben überhaupt funktioniert.

Gruss Reinhard
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#22

Re: Log-Datei realisieren

  Alt 9. Nov 2007, 14:42
Zitat von shmia:
Zitat von Infect:
Ich habe mir nun anhand von himitsus Beispielen noch etwas selbst zusammengebaut.
Ich verstehe nicht, weshalb du eine Bastel-Lösung gegenüber einer Profilösung bevorzugst ?
Weil ich diese Profilösung, bevor ich sie in eine Anwendung einbaue, gerne vorher verstehen würde. Und das tue ich bei deiner Profilösung leider nicht, weil ich wahrscheinlich, wie Herr Kern es vermutet, schlichtweg zu blöd zum Programmieren bin.
Zitat von Herr Kern:
Hallo,

dadurch, dass du das einfach weglässt, ist dein Entwurf reiner Unsinn. Du hast weder meinen noch den Beitrag himitsus auch nur annähernd verstanden. Vielleicht solltest du mal ganz einfach anfangen "watt is eine Datei"...

Gruss Reinhard
Wenn Sie die Güte hätten, mich an Ihrem Wissen teilhaben zu lassen, und mir mitteilen könnten, warum mein Entwurf reiner Unsinn ist, dann könnte ich vielleicht etwas weniger blöd sterben und es (vielleicht, aber nur vielleicht) in 2 bis 65 Jahren zu einem halbwegs fähigen Software-Entwickler schaffen.

EDIT: Um wieder bisschen runterzukommen: watt is eine Datei???
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#23

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 01:25
Zitat von Infect:
...
Wenn Sie die Güte hätten, mich an Ihrem Wissen teilhaben zu lassen, und mir mitteilen könnten, warum mein Entwurf reiner Unsinn ist, dann könnte ich vielleicht etwas weniger blöd sterben und es (vielleicht, aber nur vielleicht) in 2 bis 65 Jahren zu einem halbwegs fähigen Software-Entwickler schaffen.

EDIT: Um wieder bisschen runterzukommen: watt is eine Datei???
EXCLUSIVE ist das entscheidende: ich habe es vorgeschlagen, hamamitsu hat damit eine ganze Beispielprozedur geschrieben und shmia hat eine Alternative mit TExclusiveFileStream vorgeschlagen, die intern das gleiche tut. Vielleicht sind wir ja blöd, aber immerhin sind wir schon zu dritt.

Da du nix verstanden hast, lässt du das entscheidende Statement mit fmShareExclusive einfach weg. So was nenne ich beratungsresistent.

Wenn du dich mal mit Dateien beschäftigen würdest, dann würdest du auch auf den Begriff "exklusiver Zugriff" stossen. Meine Meinung zum Thema: solange du diesen Punkt nicht verstanden hast, kannst du dein Problem nicht lösen - stattdessen auf Mutexe u.a. auszuweichen, ist Blödsinn, weil das das Problem nur anders einkleidet und dazu noch komplizierter ist als Datei-Zugriffe.

Natürlich hast du als Jungprogrammierer das Recht, alles anders zu sehen und alle Erkenntnisse der IT mit Verachtung zu strafen. Schon ein Konkurrent weniger.

Gruss Reinhard
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#24

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 02:41
Ooohh, wie ist das schöön. Meine 10 ct zum Thema : externes Logfile z.B. Windows ist Käse. Ich würds zumindest nicht damit machen. Eigenes Logfile ist besser. Dazu würde ich aber keine Datei verwenden, sondern Datenbank. Ob die auf einem Server liegt oder lokal, das ist wohl nicht so wichtig. Notfalls muss sie eben regelmäßig lokal gesichert werden. Das gilt natürlich auch für die Daten an sich. Die sind schließlich wichtiger, als ein gesichertes Logfile ohne Daten. Man könnte die zu protokollierenden Sachen auch in die vorhandene Datenbank schreiben und basta. Aber je nachdem, was da wie reingeschrieben wird kann es durchaus sein, dass das Logfile bzw. die Tabelle (viel) größer wird, als die vorhandenen Daten. In einem Programm protokolliere ich z.B. jede gedruckte Zeile. Das aber immer mitzusichern wäre völlig überdimensioniert. Für den Fall der Fälle sollte man das zwar schon mal sichern, aber doch nicht dauernd. Obwohl, ich schreibe hier über Datensicherung etc. und das ist wohl sowieso eher von untergeordneter Bedeutung.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#25

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 02:47
das mit fmShareExclusive wurde ja schon angesprochen,
aber gern nochmals - dieses sorgt dafür daß NUR Einer zur selben Zeit die Datei öffnen kann und nicht Mehrere.


ups, ja stimmt ... ohne TimeOut wird die Schleife ja nicht verlassen, bevor die Datei nicht geöffnet wurde, also kein Problem,
aber mit TimeOut sollte man die mögliche Exception bei CloseFile natürlich auch abfangen,
also {$I-} CloseFile(F); {$I+}.

Und was das Arbeiten mit Exceptionen angeht, klar ist es möglich, aber hier gab's schonmal ein Streitgespräch darüber, ob man überhaupt absichtlich Exceptionen auslösen soll, um den Programmablauf zu steuern und da meinten die Meisten berechtigt nein.



Zitat von peschai:
Wer also das Hauptlog exclusiv öffnen kann, muss zuerst die anderen templogs auslesen und reinschreiben, dann diese templogs löschen und dann erst seine eigenen Sachen eintragen ...

was meint ihr ?
ja und dann muß man wieder die TempLogs gegen gleichzeitigen Zugriff absichern,
denn wenn ein anderer Prozess grad noch in ein TempLog reinschreibt, dann gibt es bestimmt Probleme wenn plötzlich gleichzeitig jemand anderes versucht diesen auszulesen (um ihn in den HauptLog einzutragen).

im Prinzip eine nette Lösung, aber da es sich hier nur um kurzzeitige Sperrungen des HauptLogs handelt (eie Zeile einzufügen dauert ja nicht lange), wäre der Aufwand wohl eher zu groß.
Sowas würde sich mehr für Dinge lohnen wo die Sperrung viel zu lange zum Warten dauert.

Alternativ könnte man auch im Programm sowas wie eine Warteliste anlegen, wo man die Logeinträge einfügt und welche dann bei nächster Gelegenheit in die Logdatei eingetragen werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#26

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 03:19
Ne, himitsu. Immer noch zu kurz gesprungen. Wer so was narrensicher und komfortabel machen will, der kommt um DB nicht rum. Es geht schließlich auch um die Nachbearbeitung. Angenommen am 5.6.2006 ist irgendwas passiert und man will wissen, was jetzt genau war. Gut, dann wird eben so lange gescrollt, bis man bei dem Tag ist. Viel Vergnügen bei 100 Einträgen pro Tag. Da entwerfe ich mir lieber sinnvoll eine DB-Tabelle und schreibe die Zeile SELECT * FROM LOGTABLE WHERE DATUM='05.06.2006'. Es wurde auch noch nicht angesprochen, dass der Rechner / Task eindeutig gekennzeichnet werden müsste ! Wird das Programm mehrfach gestartet, dann wäre es wohl schon sinnvoll das festzuhalten. Sollte man schon auslesen. Bei mir wird das allerdings gar nicht erst zugelassen. Beim Programmstart wird eine Semaphore gesetzt.
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#27

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 10:01
Ich frage mich dann, warum Datenbanken so gut wie nie für Logfiles verwendet werden? BTW. Per WMI kann man auch Abfragen aif Eventlogs absetzen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#28

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 10:15
weil es vermutlich einacher ist 'ne "billige" Textdatei anzulegen, statt erst 'ne Datenbank zu implementieren.
und ich glaub kaum, daß viele sich auch nur einen einzigen Gedenkan über gleichzitigen Zugriff gemacht haben ...

diese "Billig"Variante ist bestimmt seht weit verbreitet
Delphi-Quellcode:
AssignFile(F, 'my.log');
Append(F);
WriteLn(F, S);
CloseFile(F);
PS: und wie soll man "keine verbindung zur Datenbank" in dieser loggen?


z.B. in PHP mit defekter oder nicht vorhandener DB-Anbindung,
da macht sich 'ne Textdatei doch sehr gut?
(auf besondere Features wie z.B. automatische Größenanpassung muß auch keiner verzichten)
ja und für den exklusiven Zugriff ist hier mal flock verantwortlich.
Code:
$Logdatei = array('Name' => 'index.log.php', 'Max' => 1048576, 'Min' => 786432,
               'Zeile 1' => '<?PHP exit; /* Zeit "Benutzername" "Meldung" '
                          . 'Provider/IP:Port Methode:Link Postdaten Browser */ ?>');


function AddLog($S) {
  global $Meldungen, $BenutzernameAnzeige, $Logdatei;
  $H = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  $S = date('d.m.Y H:i:s', time()) . "\t\"" . addslashes($BenutzernameAnzeige) . "\"\t\"" . addslashes($S) . "\"\t"
    . (($_SERVER['REMOTE_ADDR'] != $H) ? $H : 'unbekannt') . '/' . $_SERVER['REMOTE_ADDR'] . ':' . $_SERVER['REMOTE_PORT'] . "\t"
    . $_SERVER['REQUEST_METHOD'] . ':' . $_SERVER['VHOST'] . $_SERVER['REQUEST_URI'] . "\t"
    . serialize($_POST) . "\t"
    . "\"" . addslashes($_SERVER['HTTP_USER_AGENT']) . "\"\r\n";

  @touch('./' . $Logdatei['Name']);
  @chmod('./' . $Logdatei['Name'], 0660);
  $Datei = @fopen('./' . $Logdatei['Name'], 'r+');
  if ($Datei) {
    @flock($Datei, LOCK_EX);
    @fseek($Datei, 0, SEEK_END);
    $i = @ftell($Datei);
    if (($i == 0) || ($i > $Logdatei['Max'] - strlen($S))) {
      $i -= $Logdatei['Min'] - strlen($Logdatei['Zeile 1'] . "\r\n") - strlen($S);
      @fseek($Datei, 0);
      while (($i - @ftell($Datei) > $Logdatei['Min']) && (@fgets($Datei) !== false)) ;
      $i = @ftell($Datei);

      @fseek($Datei, 0);
      @fputs($Datei, $Logdatei['Zeile 1'] . "\r\n");
      $k = @ftell($Datei);

      while (($t = @fgets($Datei)) !== false) {
        $i = @ftell($Datei);

        @fseek($Datei, $k);
        @fputs($Datei, $t);
        $k = @ftell($Datei);

        @fseek($Datei, $i);
      }
      @ftruncate($Datei, $k);
      @fseek($Datei, $k);
    }
    @fputs($Datei, $S);
    @flock($Datei, LOCK_UN);
    @fclose($Datei);
  } else $Meldungen[] = '*Logdatei konnte nicht geöffnet werden.';
}
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#29

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 10:19
Zitat von mkinzler:
Ich frage mich dann, warum Datenbanken so gut wie nie für Logfiles verwendet werden? BTW. Per WMI kann man auch Abfragen aif Eventlogs absetzen.
Und ich frage mich, warum solche Log-Mechanismen dann z.B. in IBExpert zur Verfügung stehen. Tools -> Log Manager. Inserts, Updates, Delete kann man da mit geringem Aufwand protokollieren. Es werden Log-Tables angelegt und verwaltet (per Trigger). Diesen Code kann man sich im eigenen Programm locker sparen und konkurrierende Zugriffe können in keinem Fall Schaden anrichten.

P.S.: kann sein, dass das angesprochene nur in der Vollversion geht und deshalb nicht so bekannt ist.
Gruß
Hansa
  Mit Zitat antworten Zitat
Faxman

Registriert seit: 9. Jun 2006
Ort: Mainz
17 Beiträge
 
Delphi 7 Architect
 
#30

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 10:24
senfe auch noch einen dazu und gebe hansa absolut recht.
10 -> n user in einem programm mit 2000 transaktions etc. am tag, wie soll man das noch sinnvoll ohne db überwachen, kontrollieren, sichern und auswerten.
der aufwand ist realtiv gering auch wenn's nur ein einzelner user werden soll.
lokale files, na ja, es soll ja auch noch lokale .ini's geben
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz