W środowisku produkcyjnym domyślnie ustawiłem logowanie na "INFO" (przy użyciu log4net), a na tym poziomie loguję wystarczające informacje, aby mieć bardzo duże szanse na zdiagnozowanie ewentualnych błędów. Co to jest "wystarczająca" informacja? Cóż, wszystko zależy od twojego systemu. W naszym systemie loguję punkty wejścia i wyjścia z najważniejszych metod, w tym ich parametry wejściowe i wartości zwracane (chyba że jest to dużo danych). Zgadzam się na 5-10% wydatków na logowanie (ale powinieneś to zmierzyć).
Moja perferred format jest tak: wejście
Metoda:
-> myMethod (1, "arg1")
Metoda exit:
< -MyMethod (1 " arg1 ") = true
Strzałki oznaczają, że mogę łatwo sprawdzić, czy jest to wejście czy wyjście. Uwzględniając argumenty i wartość zwracaną otrzymuję najbardziej krytyczne dane do diagnozowania błędów. Mam tylko jeden punkt zwrotny z moich metod, więc nie muszę się martwić o wiele punktów wyjścia dla mojego logowania.
Logując wejście/wyjście metody, stwierdzam, że nie muszę logować się zbyt wiele - jeśli twój kod zostanie poprawnie rozłożony na metody, to dokumentuje to przepływ wykonawczy przez twoją aplikację.
Nie popełnij błędu, nie rejestrując wystarczających informacji, ponieważ martwi Cię wydajność - zmierz, abyś był zadowolony z kosztów ogólnych, ale masz pewność, że rejestrujesz się na tyle, by zdiagnozować usterki wyłącznie w oparciu o informacje to jest w dzienniku. To, czego nie chcesz robić, to zmienić rejestrowanie na bardziej szczegółowe: po Twój klient zgłosił usterkę, a następnie mam nadzieję, że usterka wystąpi ponownie.
Używam również poziomu logowania DEBUG, który rejestruje praktycznie wszystko. Jest to używane tylko w dev/test, lub może w produkcji, ale tylko po konsultacji z klientem.
Niedawny blog mojego kolegi omawiający właśnie to: https://engblog.nextdoor.com/2015/08/05/dynamic-logging/ – Mikhail