![]() |
Re: Log-Datei realisieren
Zitat:
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 |
Re: Log-Datei realisieren
Zitat:
Zitat:
EDIT: Um wieder bisschen runterzukommen: watt is eine Datei??? |
Re: Log-Datei realisieren
Zitat:
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 |
Re: Log-Datei realisieren
Ooohh, wie ist das schöön. :lol: 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. :mrgreen: 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. :P
|
Re: Log-Datei realisieren
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:
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. |
Re: Log-Datei realisieren
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. :P 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.
|
Re: Log-Datei realisieren
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.
|
Re: Log-Datei realisieren
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 :stupid:
Delphi-Quellcode:
PS: und wie soll man "keine verbindung zur Datenbank" in dieser loggen? :roll:
AssignFile(F, 'my.log');
Append(F); WriteLn(F, S); CloseFile(F); 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.'; } |
Re: Log-Datei realisieren
Zitat:
P.S.: kann sein, dass das angesprochene nur in der Vollversion geht und deshalb nicht so bekannt ist. |
Re: Log-Datei realisieren
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 :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz