Planowałem rejestrować wiele różnych rzeczy w moim środowisku produkcyjnym, na przykład gdy użytkownik:
- Wyloguj się, wyloguj się
- Zmień profil
- Edytuj ustawienia konta
- Zmień hasło ... itp
Czy to dobra praktyka dla środowiska produkcyjnego? Co też jest dobrym sposobem na rejestrowanie tego wszystkiego. Obecnie używam następującego bloku kodu, aby zalogować się do:
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();
}
}
Czy będzie to w porządku dla produkcji? Moja aplikacja jest bardzo nowa, więc nie oczekuję od milionów użytkowników ani niczego innego, szukając najlepszych praktyk w śledzeniu działań na stronie lub nawet najlepszych praktyk.
Database
nad plikiem tekstowym ...a User Activity Logger that hooks up various events
, można go zobaczyć tutaj: stackoverflow.com/questions/30326673/... . Cieszyć się!Odpowiedzi:
To nie jest bezpośrednia odpowiedź na pytanie, a raczej rozwinięcie go.
Po uruchomieniu nowej aplikacji zalecamy rejestrowanie wszystkiego, co robi użytkownik: zaloguj się, wyloguj, zarysuje ich **, wszystko. Jeśli jest oparty na sieci, rozważ użycie map cieplnych, aby wiedzieć, co robiła ich mysz.
Kiedy pod koniec lat 70. pracowałem nad projektem BravoX w firmie Xerox, nagrywaliśmy ruchy myszy piksel po pikselu, aby dowiedzieć się, w jaki sposób użytkownicy mogą korzystać z tej dziwnej rzeczy zwanej edytorem WYSIWYG. Podczas lunchu oglądaliśmy odtworzenia sesji użytkowników. To było bardzo pouczające. Odkryliśmy wzór użycia, który nazwaliśmy Charlie Browning - użytkownik zaznaczał tekst i zapisywał go kursywą ... potem cofał ... następnie powtarzał ... tam iz powrotem, tam iz powrotem. Okazuje się, że próbowali zrozumieć te rzeczy na poziomie emocjonalnym. Więc my (Greg Kusnik wykonaliśmy kod, jeśli pamięć służy), wprowadziliśmy pewne specyficzne optymalizacje, aby wesprzeć dokładnie to zachowanie.
Bez nagrania nigdy byśmy tego nie pomyśleli.
źródło
Gdybym był tobą i trzymałem się pisania do pliku tekstowego, użyłbym log4net i zalogowałbym się w określonym pliku „UserActions.log”. W ten sposób nie zaburza to normalnego logowania. Korzystając z log4net (lub innego frameworka rejestrowania), możesz uniknąć ponownego wynalezienia koła i wykorzystania dołączających się plików dołączających pliki, ostrzeżeń / błędów / kodów debugowania / informacji, pisania plików wsadowych itp. Zawsze dobrym pomysłem jest wbudowanie się w dobre logowanie dowolna aplikacja na poziomie produkcji.
W rzeczywistości jednak prawdopodobnie lepiej przechowywać wszystkie te informacje w bazie danych. Korzystanie z bazy danych pozwoli ci ją posortować, agregować i łatwiej tworzyć statystyki
źródło
Pliki dziennika są używane 1. w celu uzyskania informacji o debugowaniu błędów systemu. 2. zbadać działania użytkowników pod kątem psot lub 3. zrozumieć, w jaki sposób ludzie korzystają z systemu, gdy nie można ich oglądać. Pamiętając o tym:
phone{(999)999-9999} email{[email protected]}
. Hasła nigdy nie należy zapisywać nigdzie indziej niż do bazy danych w jeden sposób, kryptograficznie bezpieczna funkcja skrótu z unikalną solą dla każdego użytkownika i wieloma rundami mieszania (patrz przypis)Done: 49ms
Inne wskazówki
Przypis: Aby się zalogować, zaszyfruj dostarczone hasło tym samym algorytmem mieszania i sól z oryginalnego skrótu dla tego użytkownika. Jeśli skrót dostarczonego hasła jest zgodny z hasłem przechowywanym w bazie danych, są one zalogowane. Aby to zadziałało, musisz zdefiniować zestaw znaków dla swojego hasła, nie zezwalać na znak podstawienia Unicode i inne znaki spoza zestawu.
źródło
Nie określasz, czy korzystasz z bazy danych, ale jeśli tak, a ta baza danych to SQL Server, możesz dodać coś o nazwie AutoAudit i automatycznie rejestrować wszystkie interakcje z Twoimi danymi. Pamiętaj tylko, aby podać tylko te obiekty, które chcesz skontrolować.
Ale tak czy inaczej, nie próbowałbym ręcznie kodować mojego śledzenia, ponieważ skończy się to koszmarem konserwacji.
Ponadto do rejestrowania nie rzucaj własnym, użyj rejestrowania biblioteki korporacyjnej lub Log4Net lub podobnego.
źródło
Tylko ogólna rada. Nie może być bezpośrednio związane z twoim pytaniem.
To zależy od tego, do czego zamierzasz używać dzienników? W produkcji wykorzystywane są głównie dzienniki do wykrywania operacji powodujących błędy. Jeśli przechowujesz je w celu śledzenia działań użytkownika, nie jest to częścią dziennika. To musi być funkcja produktu po stronie serwera. Te rzeczy zdecydowanie muszą przejść do bazy danych w celu późniejszego zbadania. Ale dzienniki po stronie serwera, takie jak: „Wystąpił błąd, ponieważ tekst jest pusty”, nie jest częścią tej funkcji. Te rzeczy muszą iść w systemie plików. Muszą mieć przy sobie następującą treść: - identyfikator_użytkownika, numer_błędu, tekst_błędu, nazwa_pliku, nazwa_funkcji, identyfikator_wątku, czas_daty_systemowej i dowolny inny kontekst.
Teraz mówię tylko o dziennikach w plikach.
1) Zachowaj je asynchronicznie. Operacja we / wy jest kosztowna.
2) Zaprojektuj je jako klasę niż funkcję. Przyszłe zmiany będą łatwe.
3) Jeśli to możliwe, utrzymuj je pojedynczo. Singleton jest trudny w wielu wątkach, więc projektuj poprawnie.
4) Również lepiej, aby interakcja między rejestratorem a loggee była prosta. Przez większość czasu wysyłaj numer_wiadomości niż tekst_tekstu i pozwól loggerowi pobrać wiadomość z numeru. Pomoże to, jeśli później chcemy wprowadzić zmiany w ogólnych formatach dziennika.
Zwykle logger, a także rzeczy, które musimy rejestrować, powinny być częścią projektu. Widziałem przypadki, w których nastąpiły zmiany w projekcie, aby upewnić się, że wszystkie istotne informacje są poprawnie rejestrowane.
źródło
Spróbuj Log4Net. Pozwala zalogować się do plików lub bazy danych. Oto samouczek !
Używamy Log4Net we wszystkich naszych projektach.
źródło
Korzystanie z pliku dziennika przedstawia kilka problemów. Po pierwsze, mogą pojawić się błędy, gdy wiele procesów próbuje uzyskać dostęp do pliku. Możesz również napotkać problemy podczas próby zmiany lub usunięcia pliku podczas działania systemu. Rozwiązaniem jest korzystanie z bazy danych.
Zatem krok 1 polega na utworzeniu tabeli bazy danych. Proponuję następujące pola:
* userID
* akcja (np. Logowanie, usuwanie foo)
* Trochę tekstu opisowego (tutaj dozwolone null)
* znacznik czasu
Krok 2: Utwórz procedurę składowaną z danymi wejściowymi dla ID użytkownika, akcji i tekstu opisowego. Użyj aktualnego czasu, aby utworzyć znacznik czasu.
Krok 3: Napisz metodę rejestrowania w wygodnej udostępnionej bibliotece, aby łatwo było ją włączyć wszędzie i przećwiczyć wywoływanie tej metody zgodnie z wymaganiami. Możesz także chcieć mieć logikę flagi poziomu rejestrowania, aby zmienić to, co jest rejestrowane.
Krok 4: Utwórz procedurę konserwacji, aby od czasu do czasu usuwać stare wiadomości z tabeli rejestrowania. Być może usuń, gdy starsze niż X, uruchamiaj co tydzień w ramach regularnej konserwacji bazy danych (przebudowa indeksu itp.).
Po zbudowaniu tego raz powinieneś być w stanie użyć kodu zaangażowanego w inne projekty.
źródło