CrossPlatform Logger

Dziś chciałbym pokazać jak zaimplementować prostego loggera na platformie Xamarin.Forms. Nie znalazłem żadnego dedykowanego rozwiązania oferowanego przez twórców tego Frameworka więc stworzymy dziś bardzo prosty logger,  który pozwoli na logowanie do pliku.

Zaczynamy od utworzenia prostego interfejsu ILogger oraz jego generycznej wersji, która będzie służyć do definiowania kategorii na podstawie typu.

Do zdefiniowania poziomów logowania wykorzystam prostego enuma.

Stworzę teraz klasę FileLogger,  aby umożliwić logowanie na każdej z platform użyje najprostszego mechanizmu, statycznej metody File. AppendAllText. Natomiast odpowiedzialność za tworzenie ścieżki do pliku oraz samej wiadomości przenoszę w inne miejsce za pomocą delegatów. W ten sposób mamy uniwersalny mechanizm,  który możemy wykorzystać na wielu platformach.

Jak widać powyżej pojawił się jeszcze jeden typ LogItem, jest to prosta struktura, która zastąpi przekazanie wielu parametrów do delegatów zgodnie z zasadą, że im mniej parametrów tym lepiej.

Odpowiedzialność za tworzenie ścieżki do pliku oraz samej wiadomości umieściłem w FileLoggerFactory. Klasa ta ma za zadanie stworzyć katalog gdzie zapisywane będą logi oraz zdefiniować delegaty. Oczywiście samo generowanie ścieżki oraz wiadomości jest bardzo proste i niekonfigurowalne, pozostawiam decyzję Tobie czy chcesz użyć jakiejś innej własnej implementacji.

Tak zbudowane rozwiązanie możemy zarejestrować w dowolnym kontenerze Dependency Injection. Jedyne o czym należy pamiętać to, że definicja katalogu gdzie przechowywane będą logi będzie różna dla każdej z platform, poniżej mały przykład z użyciem symboli kompilacji dla różnych platform.

To chyba właściwie wszystko jeśli chodzi o uniwersalne logowanie do pliku dla Androida, iOS-a i UWP przy użyciu framework-a Xamarin.Forms. Każda z platform dostarcza również natywne sposoby logowani ale to nie było celem tego wpisu. Jeśli chcesz dodaj kolejną implementację ILogger, np. AndroidUtilLogger i wykorzystaj Android.Util.Log.Info(„MyApp”, „Hello”).

Cały kod z przykładów znajdziesz na GitHubie.

Dodaj komentarz