Ich hatte vor, viele verschiedene Dinge in meiner Produktionsumgebung zu protokollieren, zum Beispiel wenn ein Benutzer:
- Anmelden, Abmelden
- Profil ändern
- Kontoeinstellungen bearbeiten
- Passwort ändern ... etc
Ist dies eine gute Praxis für eine Produktionsumgebung? Auch was ist ein guter Weg, um all dies zu protokollieren. Ich verwende derzeit den folgenden Codeblock, um mich anzumelden:
public void LogMessageToFile(string msg)
{
System.IO.StreamWriter sw = System.IO.File.AppendText(
GetTempPath() + @"MyLogFile.txt");
try
{
string logLine = System.String.Format(
"{0:G}: {1}.", System.DateTime.Now, msg);
sw.WriteLine(logLine);
}
finally
{
sw.Close();
}
}
Wird das für die Produktion in Ordnung sein? Meine Anwendung ist sehr neu, daher erwarte ich nicht sofort Millionen von Benutzern oder ähnliches. Ich suche nach den besten Methoden, um Aktionen auf einer Website nachzuverfolgen, oder ob es sich um die besten Methoden handelt.
Database
über eine Textdatei vorschlagen ...a User Activity Logger that hooks up various events
Sie können sie hier sehen: stackoverflow.com/questions/30326673/… . Genießen!Antworten:
Dies ist keine direkte Antwort auf die Frage, sondern eher eine Erweiterung.
Wenn Sie eine neue App starten, empfehle ich, alles zu protokollieren, was der Benutzer tut: Anmelden, Abmelden , Kratzer auf dem a **, alles. Wenn es die Web-basierte, betrachten mit Wärme abbildet , so dass Sie wissen , was ihre Maus tat.
Als ich in den späten 70er Jahren bei Xerox am BravoX-Projekt beteiligt war, haben wir pixelweise Mausbewegungen aufgezeichnet, um herauszufinden, wie Benutzer dieses seltsame Ding namens WYSIWYG-Editor verwenden könnten. Wir sahen uns während des Mittagessens die Wiedergaben von Benutzersitzungen an. Es war sehr lehrreich. Wir entdeckten ein Verwendungsmuster, das wir Charlie Browning nannten - der Benutzer wählte einen Text aus und machte ihn kursiv ... dann machten sie es rückgängig ... dann machten sie es wieder ... hin und zurück, hin und zurück. Es stellte sich heraus, dass sie versuchten, dieses Zeug auf einer emotionalen Ebene zu verstehen. Also haben wir (Greg Kusnik hat den Code gemacht, wenn Speicher zur Verfügung steht) einige spezifische Optimierungen vorgenommen, um genau dieses Verhalten zu unterstützen.
Ohne die Aufnahme hätten wir nie gedacht, dies zu tun.
quelle
Wenn ich Sie wäre und beim Schreiben in eine Textdatei bleiben würde, würde ich log4net verwenden und mich in eine bestimmte "UserActions.log" -Datei einloggen. Auf diese Weise wird Ihre normale Protokollierung nicht durcheinander gebracht. Wenn Sie log4net (oder ein anderes Protokollierungsframework) verwenden, können Sie vermeiden, das Rad neu zu erfinden und Rolling File Appenders, Warnungs- / Fehler- / Debug- / Info-Codes, das Schreiben von Batch-Dateien usw. zu nutzen. Es ist immer eine gute Idee, eine gute Anmeldung vorzunehmen Beliebige produktionsnahe Anwendung.
In Wirklichkeit ist es wahrscheinlich besser, alle diese Informationen in einer Datenbank zu speichern. Mithilfe einer Datenbank können Sie sie sortieren, aggregieren und Statistiken einfacher erstellen
quelle
Protokolldateien werden verwendet, um Informationen zum Debuggen von Systemfehlern zu erhalten. 2. um die Benutzeraktivität auf Unfug zu untersuchen oder 3. um zu verstehen, wie Leute das System benutzen, wenn Sie nicht hingehen können, um sie zu beobachten. In diesem Sinne:
phone{(999)999-9999} email{[email protected]}
. Passwörter sollten nur auf eine Art und Weise in die Datenbank geschrieben werden , kryptografisch sichere Hash-Funktion mit eindeutigem Salt für jeden Benutzer und mehreren Hash-Runden (siehe Fußnote).Done: 49ms
Andere Tipps
Fußnote: Um sich anzumelden, müssen Sie das angegebene Kennwort mit demselben Hashing-Algorithmus und dem Salt des ursprünglichen Hashs für diesen Benutzer hashen. Wenn der Hash des angegebenen Kennworts mit dem in der Datenbank gespeicherten Kennwort-Hash übereinstimmt, werden sie angemeldet. Damit dies funktioniert, müssen Sie den Zeichensatz für Ihr Kennwort definieren, das Unicode-Ersetzungszeichen und alle anderen Zeichen außerhalb Ihres Satzes nicht zulassen.
quelle
Sie geben nicht an, ob Sie eine Datenbank verwenden. Wenn dies jedoch der Fall ist und diese Datenbank SQL Server ist, können Sie eine Funktion namens AutoAudit hinzufügen und alle Interaktionen mit Ihren Daten automatisch protokollieren. Stellen Sie nur sicher, dass Sie nur die Objekte angeben, die Sie prüfen möchten.
Auf jeden Fall würde ich nicht versuchen, mein Tracking manuell zu codieren, da dies zu einem Wartungs-Albtraum führen würde.
Verwenden Sie für die Protokollierung nicht die Enterprise Library Logging oder Log4Net oder ähnliches.
quelle
Nur ein allgemeiner Rat. Möglicherweise steht es nicht in direktem Zusammenhang mit Ihrer Frage.
Es hängt davon ab, wofür Sie Protokolle verwenden werden. Meist werden in der Produktion Protokolle verwendet, um die Vorgänge zu ermitteln, die die Fehler verursachen. Wenn Sie sie zur Verfolgung der Benutzeraktionen aufbewahren, ist dies nicht Teil des Protokolls. Dies muss die serverseitige Funktion des Produkts sein. Diese Dinge müssen dann definitiv für ein späteres Studium in die Datenbank aufgenommen werden. Aber die serverseitigen Protokolle wie "Fehler aufgetreten, da ein Teil des Texts leer ist" sind nicht Teil der Funktion. Diese Dinge müssen im Dateisystem gehen. Sie müssen folgende Inhalte enthalten: - Benutzer_ID, Fehlernummer, Fehlertext, Dateiname, Funktionsname, Thread_ID, Systemdatum_Zeit und jeden anderen Kontext.
Jetzt spreche ich nur über die Protokolle in den Dateien.
1) Halten Sie sie asynchron. E / A-Operationen sind kostspielig.
2) Gestalten Sie sie als Klasse als Funktion. Zukünftige Änderungen werden einfach sein.
3) Bewahren Sie sie möglichst einzeln auf. Singleton ist in Multithreading-Umgebungen schwierig. Entwerfen Sie daher ordnungsgemäß.
4) Auch besser, um die Interaktion zwischen Logger und Loggee einfach zu halten. Meistens wird die message_number als der eigentliche message_text gesendet, und der Logger erhält die Nachricht von der Nummer. Dies hilft, wenn wir später Änderungen an den generischen Protokollformaten vornehmen möchten.
Normalerweise sollten Logger und auch die Dinge, die wir protokollieren müssen, Teil des Designs sein. Ich habe Fälle gesehen, in denen Änderungen am Design vorgenommen wurden, um sicherzustellen, dass alle relevanten Informationen ordnungsgemäß protokolliert werden.
quelle
Versuchen Sie es mit Log4Net. Mit Log4Net können Sie sich in Dateien oder Datenbanken einloggen. Hier ist Tutorial !
Wir setzen Log4Net in allen unseren Projekten ein.
quelle
Die Verwendung einer Protokolldatei wirft einige Probleme auf. Erstens können Fehler auftreten, wenn mehrere Prozesse versuchen, auf die Datei zuzugreifen. Sie können auch Probleme bekommen, wenn Sie versuchen, die Datei zu durchlaufen oder zu löschen, während Ihr System läuft. Der Weg dahin ist die Verwendung einer Datenbank.
Schritt 1 besteht also darin, eine Datenbanktabelle zu erstellen. Ich schlage folgende Felder vor:
* userID
* action (zB logon, delete foo)
* Beschreibender Text (hier Nullen zulassen)
* timestamp
Schritt 2: Erstellen Sie eine gespeicherte Prozedur mit Eingabe für Benutzer-ID, Aktion und beschreibenden Text. Verwenden Sie einfach die aktuelle Uhrzeit, um den Zeitstempel zu erstellen.
Schritt 3: Schreiben Sie eine Protokollierungsmethode in eine praktische gemeinsam genutzte Bibliothek, damit Sie sie problemlos überall einbinden können, und üben Sie, diese Methode nach Bedarf aufzurufen. Möglicherweise möchten Sie auch eine Protokollierungsstufen-Flag-Logik haben, um zu ändern, was protokolliert wird.
Schritt 4: Erstellen Sie eine Wartungsroutine, um von Zeit zu Zeit alte Nachrichten aus der Protokollierungstabelle zu löschen. Vielleicht löschen, wenn älter als X, jede Woche oder so im Rahmen der regulären DB-Wartung (Indexwiederherstellung usw.).
Sobald Sie dies einmal erstellt haben, sollten Sie in der Lage sein, den Code in anderen Projekten zu verwenden.
quelle