Różnica między $ a string.format

0

Hej,

Ostatnio byłem na rozmowie gdzie pan rekruter mnie pouczał, że logi które wpisałem :

logger.Info($" Start class {nameof(Example)}");

jest źle. Tłumaczył mi, że w logach powinienem używać string.format bo wtedy poprawnie mi wyświetli nazwę takiej klasy etc. Czyli:

logger.Info(string.Format(" Start class {0}", nameof(Example));

Co wy o tym sądzicie? Szczerze powiedziawszy mnie to zatkało. Zawsze myślałem, że to samo, a wybierałem pierwszą opcje ze względu, że dla mnie jest bardziej czytelna.

0

Głupota. Po to w C# 6.0 wprowadzono interpolację aby z niej korzystać. Gdyby miało być inaczej, to by jej nie wprowadzili.

3

W skrócie, traktuj tekst jako szablon. W przeciwnym razie utracisz informacje o parametrach. Tutaj lepiej wyjaśnione:

4

Są dwie możliwości:

  1. rekruter nie rozumie
  2. Ty nie zrozumiałeś rekrutera

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-8.0

Poprawne logowanie nie wymaga ani string.Format ani interpolacji, to implementacja loggera jest odpowiedzialna za renderowanie logów w tej czy innej formie. Dzięki temu zachowuje się strukturę logów, co pozwala na ich łatwe filtrowanie w różnych narzędziach.

0

Generalnie przy logowaniu nie używaj formatowania z języka, to po prostu niewydajne (po co wołać ToString() na dużym obiekcie i formatować string jeżeli np. poziom logowania jest taki że ta wiadomość i tak nie trafi do logów).

Lepiej używać tego co biblioteka do logowania oferuje https://github.com/nlog/nlog/wiki/How-to-use-structured-logging


Ale to jeszcze nic, jest jeszcze powód security załóżmy że logujesz np. pole z formularza jeżeli user będzie złośliwy to wpisze tam {foo} i będzie mógł w najlepszym wypadku wywalić twój program (string.Format zwróci string typu "Pole = {foo}" a potem biblioteka od logowania będzie jeszcze raz próbowała interpretować {foo} mimo iż nie przekazano jej żadnych dodatkowych paramterów) a w najgorszym podatność https://www.trendmicro.com/en_us/what-is/apache-log4j-vulnerability.html.

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