Chciałbym zaimplementować logowanie w mojej aplikacji, ale wolałbym nie używać żadnych zewnętrznych frameworków, takich jak log4net.
Więc chciałbym zrobić coś takiego jak echo DOS- a do pliku. Jaki jest najskuteczniejszy sposób, aby to zrobić?
Czy istnieje sposób rejestrowania nieobsłużonych wyjątków zarejestrowanych bez korzystania z zewnętrznej struktury?
Odpowiedzi:
public void Logger(string lines) { //Write the string to a file.append mode is enabled so that the log //lines get appended to test.txt than wiping content and writing the log using(System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.txt", true)) { file.WriteLine(lines); } }
Aby uzyskać więcej informacji, MSDN
źródło
using
pliku on file, chociaż ponieważ jest on lokalny dla metody, i tak zostanie wkrótce usunięty.file.WriteLine(lines);
zgłasza wyjątek, kod nigdy nie trafifile.Close();
. Korzystanie zusing
jest odpowiednikiemtry { // using block } finally { // Dispose }
. Oznacza to, że obiekt zostanie usunięty, nawet jeśli kod wewnątrzusing
bloku zgłosi wyjątek,Czemu? Log4net prawdopodobnie spełniłby większość Twoich wymagań. Na przykład sprawdź tę klasę: RollingFileAppender .
Log4net jest dobrze udokumentowany, aw sieci można znaleźć tysiące zasobów i przypadków użycia.
źródło
Możesz pisać bezpośrednio do dziennika zdarzeń. Sprawdź następujące łącza:
http://support.microsoft.com/kb/307024
http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx
A oto przykład z MSDN:
using System; using System.Diagnostics; using System.Threading; class MySample{ public static void Main(){ // Create the source, if it does not already exist. if(!EventLog.SourceExists("MySource")) { //An event log source should not be created and immediately used. //There is a latency time to enable the source, it should be created //prior to executing the application that uses the source. //Execute this sample a second time to use the new source. EventLog.CreateEventSource("MySource", "MyNewLog"); Console.WriteLine("CreatedEventSource"); Console.WriteLine("Exiting, execute the application a second time to use the source."); // The source is created. Exit the application to allow it to be registered. return; } // Create an EventLog instance and assign its source. EventLog myLog = new EventLog(); myLog.Source = "MySource"; // Write an informational entry to the event log. myLog.WriteEntry("Writing to event log."); } }
źródło
Jeśli szukasz naprawdę prostego sposobu logowania, możesz użyć tej jednej wkładki. Jeśli plik nie istnieje, zostanie utworzony.
System.IO.File.AppendAllText(@"c:\log.txt", "mymsg\n");
źródło
Pisałem własne rejestrowanie błędów, dopóki nie odkryłem ELMAH . Nigdy nie udało mi się tak perfekcyjnie wykonać części dotyczącej wysyłania e-maili, jak robi to ELMAH.
źródło
Jeśli chcesz pozostać blisko .NET, sprawdź Enterprise Library Logging Application Block . Spójrz tutaj . Lub, aby zapoznać się z samouczkiem szybkiego startu, sprawdź to . Użyłem bloku aplikacji walidacyjnej z biblioteki korporacyjnej i naprawdę odpowiada on moim potrzebom i jest bardzo łatwy do „odziedziczenia” (zainstalowania i odnowienia!) W Twoim projekcie.
źródło
Jeśli chcesz mieć własne, niestandardowe rejestrowanie błędów, możesz łatwo napisać własny kod. Dam ci fragment jednego z moich projektów.
public void SaveLogFile(object method, Exception exception) { string location = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\FolderName\"; try { //Opens a new file stream which allows asynchronous reading and writing using (StreamWriter sw = new StreamWriter(new FileStream(location + @"log.txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite))) { //Writes the method name with the exception and writes the exception underneath sw.WriteLine(String.Format("{0} ({1}) - Method: {2}", DateTime.Now.ToShortDateString(), DateTime.Now.ToShortTimeString(), method.ToString())); sw.WriteLine(exception.ToString()); sw.WriteLine(""); } } catch (IOException) { if (!File.Exists(location + @"log.txt")) { File.Create(location + @"log.txt"); } } }
Następnie, aby faktycznie zapisać w dzienniku błędów, po prostu napisz (
q
będąc złapanym wyjątkiem)źródło