Logowanie aplikacji. Czego używacie i dlaczego?

2

Do tej pory używaliśmy log4net w aplikacji rozwijanej co najmniej od 2010 roku. Niebawem będziemy rozpoczynać pracę nad nową wersją aplikacji i może czas na zmianę. Czy używacie też, czy czego innego i dlaczego?

Założyłem też ten wątek aby @somekind mógł rozwinąć tę myśl ;)

6
Console.WriteLine("test")

Ja używam Serlioga bo: minimum konfiguracji, zrzuca do pliku z podziałem na daty. (Jestem prostym człowiekiem)

Ogólnie taki logger powinien być konfigurowalny w 15 min, a nie dłubanie 2 dni żeby logger logował do pliku. C'mon, jest apka do napisania, a nie boilerplateowanie loggera.

1

serilog + seq - w aplikacjach webowych fajnie się sprawdza

1

@Sarrus: z jakiej branży to apka?

0

Zarządzanie budynkiem

3

Widzę na nugecie, że po paru latach spokoju ktoś znowu zaczął tego trupa ruszać. :(

To jest jakiś przedwieczny klon bilblioteki Javowej, klony biblotek Javowych są zazwyczaj słabe, bo pisane dla Javy, więc kopiują jej pomysły i ograniczenia. W tym przypadku akurat chociażby brakiem pobierania pewnych informacji w locie (trzeba samemu podać nazwę klasy, dla której logger jest tworzony), albo javowym formatowaniem stringów (z procentami). (Żeby nie było, lubię procenty, nawet podczas programowania, ale nie w kodzie).
Pamiętam też, że były jakieś problemy z kontrolowaniem leveli, w sensie ustawienie level po postu nie działalo, trzeba było obchodzić dając minLevel i maxLevel.

Znacznie bardziej lubię NLoga, który po prostu działa, i ma czytelniejszą konfigurację. A ostatnio używam raczej Seriloga, zresztą jak widzę, to jest to kierunek, w którym zmierza spora część softu.

0
somekind napisał(a):

W tym przypadku akurat chociażby brakiem pobierania pewnych informacji w locie (trzeba samemu podać nazwę klasy, dla której logger jest tworzony),

Można przekazać typ :P. My mamy to rozwiązane infrastrukturalnie przez kontener, który pobiera obiekt dla konkretnego typu i z konkretnego repozytorium.

albo javowym formatowaniem stringów (z procentami). (Żeby nie było, lubię procenty, nawet podczas programowania, ale nie w kodzie).

Tu nawet nie wiem o czym piszesz, bo żadnych nigdy procentów nie widziałem (a też lubię). Wcześniej korzystało się z DebugFormat, InfoFormat itp. Obecnie mamy interpolację stringów, więc też ten problem odszedł do lamusa

Znacznie bardziej lubię NLoga, który po prostu działa, i ma czytelniejszą konfigurację. A ostatnio używam raczej Seriloga, zresztą jak widzę, to jest to kierunek, w którym zmierza spora część softu.

Tak też zauważyłem rosnącą popularność Seriloga. Jakieś wrażenia?

0
Sarrus napisał(a):

Można przekazać typ :P.

No, a w NLogu się woła GetCurrentClassLogger() i nie trzeba niczego przekazywać. W log4net to pięknie wygląda, gdy to tworzenie loggera jest kopiowane z klasy do klasy bez zmiany tego oryginalnego typu. I potem wszystkie logi idą z jednej klasy.

Tu nawet nie wiem o czym piszesz, bo żadnych nigdy procentów nie widziałem (a też lubię).

Procenty, procenty, wszędzie procenty:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="100KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

Wcześniej korzystało się z DebugFormat, InfoFormat itp. Obecnie mamy interpolację stringów, więc też ten problem odszedł do lamusa

A no właśnie, ten dziwny podział metod na te z formatem i bez formatowania. To też przykład jakichś zaszłości historycznych z oryginału, bo w C# to nigdy nie było potrzebne. Teraz faktycznie jest przyjemniej, no ale żeby Microsoft nowymi wersjami C# łatał biblioteki od zewnętrznych dostawców? Aberracja jakaś.

Tak też zauważyłem rosnącą popularność Seriloga. Jakieś wrażenia?

Nie wkurza mnie, a to już dużo. ;)

2

Jak firma ma $$$ to teraz loguje się do chmury. Ba nie tylko loguje ale robi observability czyli zbiera logi, metryki i trace'y. Po co to komu? Przy 100 mikroserwisach zaagregowanie logów w jednym miejscu umożliwia szybsze rozwiązywanie problemów i odnajdywanie korelacji.

Wersja na cebulę to stack ELK.
Znani dostawcy chmurowi observability: SumoLogic, DataDog, Dynatrace, GrayLog

(Pracuje w SumoLogic żeby mi nikt nie wytykał ukrytego lokowania produktu).

PS. Druga strona medalu jest taka że mając już zagregowane logi i metryki łatwo tworzyć alarmy i alerty, np. gdy liczba błędów przekracza pewnien poziom lub mamy ponad X wiadomości czekających na przetworzenie w Kafce.

1

Serilog jest bardzo przyjemny, aczkolwiek brakuje mi sinka z kolorowaniem na konsole, więc zawsze muszę jakiś minimalny wrapper na to narzucić.

0

Blog. Nie wiem dlaczego. Działa i juz.

0

NLog, głównie z przyzwyczajenia

0

serilog + splunk

0

NLog. Nie używałem niczego innego.

0

Nie mam za dużo doświadczenia z serilog choć jest skonfigurowany u mnie w projekcie.
Serilog z tym mnie wkurza że ma wszystko osobno, chcąc mieć kilka funkcji trzeba dołączyć 2, 3, 5 bibliotek. brzydko wygląda w aplikacji klienckiej, robiąc backend nie ma to znaczenia.
No i u mnie w projekcie wykorzystali serilog do logowania do logstasha i gotowy logger tworzy JSONa przez kontatenację stringów i były z tym jakieś zgrzyty bo żeby dodać jakieś pole musieliśmy nadpisać klasę i samemu sklejać stringi i przy niektórych danych wejściowych generowało nieprawidłowy json i trzeba było walczyć z domyślnym formatowaniem i serializacją seriloga bo nie pozwalało użyć dwa razy tego samego parametru w wyniku itp, nie pamiętam szczegółów - ogólnie wyszło strasznie chwiejne rozwiązanie
Konfiguracja wydaje mi się przekombinowana i z tego co widzę możliwa tylko z kodu? W jednym z projektów w ramach supportu normalną rzeczą było podłączenie się zdalnie do klienta i podniesienie poziomu logów w configu a potem analiza logów. Z tego co widzę to takie coś jest niemożliwe z serilogiem bez stworzenia własnej konfiguracji do konfiguracji. Akurat do loggerów preferuję config zewnętrzny w jakimś xml / json.
// edit: doczytałem że jest osobna paczka (a jakże) dodająca czytanie configa loggera z configa, ale i tak trzeba zakodować żeby serilog się ustawił z konfiguracji. To tak w kontraście do NLoga który nie potrzebuje żeby zaśmiecać kod inicjalizacją loggera.
No i trochę mnie "boli" serializacja całych obiektów i nie podoba mi się ta idea. Bałbym się logować zbyt dużo ze względu na performance, jak chcę mieć wgląd w stan całych obiektów to raczej bym się podłączył do zdalnego debugowania niż przeglądał logi, a nie da się łatwo at runtime przełączyć poziomu logowania (chyba że sobie to sami zakodujemy albo dodamy 17 bibliotek)

1 użytkowników online, w tym zalogowanych: 0, gości: 1