Nie jestem zaznajomiony z log4net lub log.DebugFormat (...).
Ale koszt logowania jest naprawdę w dwóch obszarach.
Pierwsza z nich to połączenie rejestrowania, a druga to faktyczne utrwalanie informacji dziennika.
Osłony pomagają ograniczyć rejestrowanie do minimum, gdy rejestrowanie nie jest konieczne. Zwykle jest bardzo szybki, ponieważ jest niewiele więcej niż wywołaniem metody i porównaniem dwóch skalarów.
Jeśli jednak nie używasz osłon, koszt może stać się ceną tworzenia rzeczywistych argumentów dotyczących rejestrowania.
Na przykład w log4j, to był wspólny idiom:
log.debug("Runtime error. Order #" + order.getOrderNo() + " is not posted.");
Tutaj koszt jest rzeczywista ocena ekspresji łańcucha składającego wiadomość. Dzieje się tak, ponieważ niezależnie od poziomu rejestrowania tworzone jest wyrażenie i wynikowy ciąg. Wyobraź sobie, że zamiast tego trzeba było coś takiego:
log.debug("Something wrong with this list: " + longListOfData);
To może stworzyć dużą i kosztowną zmienną string, że jeżeli poziom dziennika nie został ustalony dla debugowania, po prostu zmarnowane.
Strażnicy:
if (log.isDebug()) {
log.debug(...);
}
wyeliminowanie tego problemu, ponieważ wezwanie isDebug jest tani, zwłaszcza w porównaniu do rzeczywistego stworzenia argumentu.
W moim kodu, mam napisane otoki dla rejestrowania i mogę tworzyć logi tak:
log.debug("Runtime error. Order # {0} is not posted.", order.getOrderNo());
Jest to ładne kompromis. Opiera się to na Javie varargs, a mój kod sprawdza poziom rejestrowania, a następnie odpowiednio formatuje komunikat. To prawie tak szybko, jak strażnicy, ale o wiele czystsze do napisania.
Teraz dziennik.DebugFormat może zrobić coś podobnego, czego nie wiem.
Oprócz tego, oczywiście, jest faktyczny koszt logowania (do ekranu, do pliku, do gniazda itp.). Ale to tylko koszt, który musisz zaakceptować. Moją najlepszą praktyką w tym przypadku, gdy jest to praktyczne, jest kierowanie rzeczywistych komunikatów dziennika do kolejki, która jest następnie zbierana i wysyłana do właściwego kanału przy użyciu osobnego wątku. Pomaga to przynajmniej w utrzymywaniu logarytmu z dala od głównego komputera, ale ma własne koszty i złożoność.
Czy logujesz się do konsoli, do pliku, do bazy danych? Ma to duże znaczenie pod względem wydajności. –