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 4 von 5   « Erste     234 5      
Hansa

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

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
 
#2

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.202 Beiträge
 
Delphi 12 Athens
 
#3

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
 
#4

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
 
#5

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
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 13:26
Hallo zusammen,
(ich hoffe, dass meine nachfolgende Frage zu diesem Thread paßt und kein neuer Thread dafür erstellt werden braucht)

Wenn man nun die Größe der Protokolldatei festlegen will/muss, wie sollte man da am besten vorgehen?
Die Protokolldatei jedes mal in z.B. eine TStringList laden und wenn eine vorgegebene Größe erreicht ist, dann einfach einen festen "Block" (z.B. die ersten 20000 Zeilen) löschen?
Dann hätte man immer noch eine gewisse Historie.
(das wäre dann quasi eine selbst reorganisierende Datei)

Eine andere Möglichlkeit wäre noch, wenn die Protokolldatei die vorgegebene Größe erreicht hat, dann diese Datei einfach umzubenennen und die Protokollierung in eine neue und damit "leere" Protokolldatei fortzusetzen.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 13:36
Hallo Jürgen,

ich würde an Hand von Erfahrungswerten ein Zeitintervall bestimmen, nach dessen Ablauf automatisch auf eine neue Protokolldatei umgestellt wird.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 14:11
Hallo marabu,
so einfach?!
Ehrlich gesagt, an diese Variante hatte ich noch gar nicht gedacht.
Ich werde das bei mir jetzt auch genauso ändern, dass ein eigenen Ordner (Protokollierung) innerhalb der Anwendung angelegt wird.
Dann wird für jeden Monat eine Protokolldatei geschrieben.
Und dann noch einen "Protokoll-Viewer" basteln. Fertig ist's.

Danke und ein schönes Wochenende!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 14:23
also in meiner PHP-Version ist es so gelöst, das bei Erreichen einer maximalen Dateigröße die Datei bis zum Minimum(Dateigröße) alte Einträge entfernt werden.
(hab mir das so einfallen lassen, da in dem Projekt seltener Einträge vorgenommen werden und eh nur die Einträge der näheren Vergangenheit interesant sind)

und jedesmal die Datei komplett einzulesen wäre auch nicht grad optimal.
(verbraucht nur unnötig Resourcen und Zeit)
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
 
#10

Re: Log-Datei realisieren

  Alt 10. Nov 2007, 18:19
Trotz der Einwände bleibe ich hier bei der Ausgangsfrage :

Zitat von Infect:
..ich möchte gerne eine Log-Datei realisieren, in die mehrere Programme (bzw. mehrere Instanzen desselben Programms) ihre Einträge machen. Wie realisiere ich so etwas am besten, ohne dass die Programme sich beim Hineinschreiben in die Datei in die Quere kommen?
Die Gefahr besteht bei Textdateien immer, dass in eine zum Lesen geöffnete Datei versucht wird, was reinzuschreiben. Kann bei DB kaum passieren, sofern die entsprechende Tabelle zumindest einen eindeutigen Primärschlüssel besitzt. Oder soll unnötig rumgeeiert werden ? Faxman hat die Problematik erkannt, sonst keiner.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 08:00 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