Strona główna » Kursy » Kurs C# » Logowanie Danych
 

Logowanie Danych

Wstęp

Tworzenie logów w programie pozwala na dokładne określenie przyczyny błędu, który wystąpił w programie. W artykule zostanie wyjaśnione jak skorzystać z klasy Debug, która pozwala na zapis logów do pliku. Opisane zostaną podstawowe metody, które pozwalają na sformatowanie zapisu informacji.

Implementacja

W celu skorzystanie z klasy Debug należy dołączyć do programu System.Diagnostics. Jest to klasa statyczna, więc takiego obiektu nie trzeba powoływać do istnienie słówkiem kluczowym new, a od razu można wywołać na niej metody. Na początku programu najlepiej jest skonfigurować klasę.

Konfiguracja

W celu ustalenia, gdzie logowane dane mają być przekazywane należy utworzyć obiekt TextWriterTraceListener i podać mu strumień zapisu danych. Następnie należy ten obiekt podłączyć do klasy Debug. Warto również włączyć AutoFlush na tej samej klasie. Dzięki temu pewne jest, że wszystkie dane zostaną zapisane. Przykładowo, aby zapisywać do pliku "log.txt" należy wpisać:

  1.   string plik = "log.txt";
  2.   TextWriterTraceListener zapis = new TextWriterTraceListener(System.IO.File.CreateText(plik));
  3.   Debug.Listeners.Add(zapis);
  4.   Debug.AutoFlush = true;

Zapis danych

Zapis informacji jest bardzo podobny do wypisywania danych na konsolę. W celu zapisania linijki danych należy wywołać metodę WriteLine(). Opcjonalnie można podać drugi argument, który będzie wskazywał źródło przekazywanej wiadomości. Można tam np. podać nazwę metody, albo nazwę modułu, który zapisuje dane. Poniższy kod:

  1.   Debug.WriteLine("Początek zapisu");
  2.   Debug.WriteLine("Rozpoczęcie pracy", "Aplikacja");

zapisze następujące dane:

  1. Początek zapisuAplikacja: Rozpoczęcie pracy

Linijkę tekstu można też zapisać "na raty" korzystając z metody Write(). W poniższym kodzie wpisywany jest początek linii. Następnie zostaje wczytana od użytkownika liczba, a potem zostaje zapisana do logu.

  1.   Debug.Write("Wczytano liczbę ");
  2.   Console.Write("Podaj liczbę\n a = ");
  3.   int a = Convert.ToInt32(Console.ReadLine());
  4.   Debug.WriteLine(a);

Przykładowo dla liczby 5 zostanie zapisane:

  1. Wczytano liczbę 5

Warunkowy zapis

Logowanie wszystkich danych nie ma sensu i może wpłynąć negatywnie na wydajność aplikacji (poprzez zapis wszystkiego co możliwe). Istnieje możliwość, aby zapisywać wybrane dane poprzez zastosowanie warunku if. Jednak przez to kod mógłby bardzo szybko stać się nieczytelny. Jednak, aby tego uniknąć wystarczy skorzystać z metody WriteLineIf, która sprawdza warunek (podany jako pierwszy argument) i dopiero wtedy zapisuje dane (podane jako drugi argument). Przykładowo można następująco rozróżnić przydział liczby:

  1.   Debug.WriteLineIf(a > 0, "Nieujemna");
  2.   Debug.WriteLineIf(a < 0, "Ujemna");
  3.   Debug.WriteLineIf(a == 0, "Zero");

Wcięcie

Warto zwrócić uwagę na to, że do pewnej linijki tekstu można dopisać wiele informacji. Najprostszym sposobem, aby je wyróżnić polega na zrobieniu w pliku wcięcia. Ustalanie wcięć samemu w każdym komunikacie nie jest zbyt praktyczne. Do tworzenia dodatkowego wcięcia można posłużyć się metodą Indent(), a w celu zmniejszenia Unindent(). Przykładowo:

  1.   Debug.Indent();
  2.   Debug.WriteLineIf(a % 2 == 0 && a != 0, "Parzysta");
  3.   Debug.WriteLineIf(a % 2 == 1 && a != 0, "Nieparzysta");
  4.   Debug.Unindent();
Zadania
Zadanie 1
Kod źródłowy Zadanie 1Kod źródłowy Zadanie 1