Różnica między logger.info i logger.debug

84

Jaka jest różnica między logger.debugi logger.info?

Kiedy zostanie logger.debugwydrukowany?

Senthilnathan
źródło

Odpowiedzi:

30

Będzie to zależeć od konfiguracji logowania. Wartość domyślna będzie zależeć od używanej platformy. Chodzi o to, że później, zmieniając ustawienie konfiguracyjne z INFO na DEBUG, zobaczysz tonę więcej (lub mniej, jeśli na odwrót) linii drukowanych bez ponownej kompilacji całej aplikacji.

Jeśli zastanawiasz się, którego użyć, sprowadza się to do zastanowienia się, co chcesz zobaczyć na jakim poziomie. W przypadku innych poziomów, na przykład w Log4J, spójrz na API, http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html

toomasr
źródło
121

Proponuję zapoznać się z artykułem „Krótkie wprowadzenie do log4j” . Zawiera krótkie wyjaśnienie poziomów dziennika i pokazuje, jak można je wykorzystać w praktyce. Podstawową ideą poziomów dziennika jest to, że chcesz mieć możliwość skonfigurowania, ile szczegółów zawierają dzienniki w zależności od sytuacji. Na przykład, jeśli próbujesz rozwiązać problem, dzienniki powinny być bardzo szczegółowe. W środowisku produkcyjnym możesz chcieć widzieć tylko ostrzeżenia i błędy.

Poziom dziennika dla każdego komponentu systemu jest zwykle kontrolowany za pomocą parametru w pliku konfiguracyjnym, więc można go łatwo zmienić. Twój kod zawierałby różne instrukcje logowania na różnych poziomach. Odpowiadając na wiadomość Exception, możesz zadzwonić Logger.error. Jeśli chcesz wydrukować wartość zmiennej w dowolnym momencie, możesz zadzwonić Logger.debug. Ta kombinacja konfigurowalnego poziomu rejestrowania i instrukcji rejestrowania w programie umożliwia pełną kontrolę nad sposobem rejestrowania aktywności przez aplikację.

Przynajmniej w przypadku log4j kolejność poziomów logów jest następująca:

DEBUG < INFO < WARN < ERROR < FATAL

Oto krótki przykład z tego artykułu pokazujący, jak działają poziomy dziennika.

   // get a logger instance named "com.foo"
   Logger logger = Logger.getLogger("com.foo");

   // Now set its level. Normally you do not need to set the
   // level of a logger programmatically. This is usually done
   // in configuration files.
   logger.setLevel(Level.INFO);

   Logger barlogger = Logger.getLogger("com.foo.Bar");

   // This request is enabled, because WARN >= INFO.
   logger.warn("Low fuel level.");

   // This request is disabled, because DEBUG < INFO.
   logger.debug("Starting search for nearest gas station.");

   // The logger instance barlogger, named "com.foo.Bar",
   // will inherit its level from the logger named
   // "com.foo" Thus, the following request is enabled
   // because INFO >= INFO.
   barlogger.info("Located nearest gas station.");

   // This request is disabled, because DEBUG < INFO.
   barlogger.debug("Exiting gas station search");
William Brendel
źródło
@momomo możesz sprawdzić odpowiedź, aby dowiedzieć się, jaki Tracejest poziom logowania.
RBT
Twój przykład If you want to print the value of a variable at any given point, you might call Logger.debugpomógł mi wyjaśnić zamieszanie, jakie miałem między poziomem Debuga Tracepoziomem. Dziękuję Ci!
RBT
13

Tylko wyjaśnienie dotyczące zestawu wszystkich możliwych poziomów, czyli:

ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
user1823890
źródło
9

Zasadniczo zależy to od konfiguracji rejestratorów. Zwykle wynik debugowania byłby zapisywany podczas programowania, ale wyłączany w środowisku produkcyjnym - lub być może wybrano kategorie debugowania wypisywane podczas debugowania określonego obszaru.

Celem posiadania różnych priorytetów jest umożliwienie zwiększania / zmniejszania poziomu szczegółowości określonego komponentu w rozsądnie drobnoziarnisty sposób - i wystarczy zmienić konfigurację rejestrowania (zamiast kodu), aby zobaczyć różnicę.

Jon Skeet
źródło
3
  1. INFO służy do rejestrowania informacji o działaniu programu zgodnie z oczekiwaniami.
  2. DEBUG służy do znalezienia przyczyny w przypadku, gdy program nie działa zgodnie z oczekiwaniami lub wystąpił wyjątek. leży to w interesie dewelopera.
Santosh Srivastava
źródło
2

To jest bardzo stare pytanie, ale nie widzę tutaj swojego zrozumienia, więc dodam moje 2 centy:

Każdy poziom odpowiada / mapuje typowi użytkownika:

  • debug: programista - ręczne debugowanie
  • trace: automatyczne rejestrowanie i śledzenie kroków - do obsługi trzeciego poziomu
  • info: technik / poziom wsparcia 1/2
  • warn: błąd technika / użytkownika: automatyczny poziom alertu / wsparcia 1
  • krytyczny / krytyczny: zależy od konfiguracji - lokalne IT
Mickey Perlstein
źródło
0

Jaka jest różnica między logger.debug i logger.info?

Są to tylko niektóre już zdefiniowane poziomy domyślne. Jeśli chcesz, możesz zdefiniować własne poziomy. Celem tych poziomów jest włączenie / wyłączenie jednego lub więcej z nich bez dokonywania jakichkolwiek zmian w kodzie.

Kiedy logger.debug zostanie wydrukowany?

Po włączeniu debugowania lub wyższego poziomu w konfiguracji.

rzemieślnik
źródło
0

To zależy od poziomu wybranego w pliku konfiguracyjnym log4j.

<Loggers>
        <Root level="info">
        ...

Jeśli twój poziom to "info" (domyślnie), logger.debug(...)nie zostanie wyświetlony w twojej konsoli. Jeśli jednak twój poziom to „debugowanie”, tak się stanie.

W zależności od poziomu krytyczności twojego kodu, powinieneś użyć najbardziej dokładnego poziomu spośród następujących:

ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
Jacek'
źródło