Database
 sql >> Baza danych >  >> RDS >> Database

Poznaj podstawy rejestrowania w Javie

Java włączyła bibliotekę API do logowania jako część swojego frameworka z JDK 1.4. Dziś jest to wbudowana obsługa Javy. Jednak tę bibliotekę można dostosowywać i rozszerzać w tym sensie, że możemy korzystać z jednego lub więcej alternatywnych rozwiązań rejestrowania dostarczanych przez biblioteki innych firm. Chociaż te rozwiązania innych firm mają inne podejście do tworzenia danych dziennika, ostatecznie mają ten sam cel, jakim jest rejestrowanie komunikatów ze środowiska wykonawczego aplikacji. W tym artykule omówiono podstawy logowania i pokazano, jak można go używać w programie Java.

Logowanie w Javie

Dziennik zwykle oznacza prowadzenie jakiejś ewidencji. Z punktu widzenia programowania jest to proces zapisywania komunikatów w pliku dziennika podczas wykonywania programu. Dzienniki komunikatów utrwalonych są odwoływane, zazwyczaj przez programistę, w celu zebrania pewnych informacji statystycznych o czasie wykonywania, które po przeanalizowaniu mogą ujawnić nieprzewidziane sytuacje. W rzeczywistości może być wiele różnych powodów, dla których używane jest logowanie, a to tylko jeden z nich. Zgodnie z dokumentacją Java API istnieją cztery główne zastosowania rejestrowania:

  • Do diagnozowania problemów przez użytkowników końcowych i administratorów systemu.
  • Inżynierowie serwisu terenowego mogą wygodnie zdiagnozować problem na podstawie zarejestrowanych wiadomości i szybko go naprawić.
  • Organizacja programistyczna może śledzić wewnętrzne wykonanie określonego podsystemu i analizować go.
  • Deweloperzy mogą debugować aplikację w trakcie opracowywania, uzyskując szybki wgląd w podstawowy problem z zarejestrowanych wiadomości.

Rejestrowanie Java API zostało zaprojektowane w sposób niedrogi, w tym sensie, że można je pozostawić jako pozostałość nawet w aplikacji produkcyjnej. Nie powoduje to dużego obciążenia wydajnością wykonywania programu. Interfejs API zapewnia mechanizm dynamicznej zmiany wytwarzania komunikatów dziennika, dzięki czemu wpływ rejestrowania można zminimalizować podczas operacji wymagających maksymalnej wydajności. API składa się z wielu klas i interfejsów, które można dostosować, rozszerzając je. Cały interfejs API logowania znajduje się w pakiecie java.util.logging . Klasy i interfejsy w tym pakiecie zapewniają podstawowe funkcje rejestrowania w Javie.

Poziomy rejestrowania

Pilność logowania do programu Java można podzielić na kilka poziomów. Poziomując w górę i w dół, możemy zwiększyć lub zmniejszyć koszt logowania do aplikacji produkcyjnej. W ten sposób kontrolujemy wydajność działania aplikacji, w której konieczne jest zarejestrowanie jednego lub więcej jej zdarzeń. Osiąga się to dzięki klasie o nazwie Poziom , który definiuje znaczenie rejestrowania. Poziom rejestrowania jest uporządkowany i określony przez statyczny stałe całkowite, takie jak:

  • Poziom.WSZYSTKO: Wszystkie wiadomości są rejestrowane, niezależnie od ważności
  • Poziom.WYŁ: Rejestrowanie jest wyłączone
  • Poziom.CIĘŻKI: Wskazuje poważną awarię; musi być zalogowany
  • Poziom.OSTRZEŻENIE: Wskazuje komunikaty ostrzegawcze
  • Poziom.INFO: Komunikat informacyjny środowiska uruchomieniowego
  • Poziom.KONFIG: Komunikaty o konfiguracji statycznej
  • Poziom.DOKLADNY: Śledzenie wiadomości
  • Poziom.FINER: Szczegółowe wiadomości śledzące
  • Poziom.NAJWYŻSZA: Bardzo szczegółowe wiadomości śledzące

Komponenty rejestrujące

Potrzebujemy rejestratora przykład do dowolnego logowania w Javie. Ta instancja jest odpowiedzialna za logowanie danych do LogRecord . Rekord dziennika wystąpienia są używane do przekazywania żądań rejestrowania między platformami rejestrowania a poszczególnymi programami obsługi dzienników. Java SE zapewnia pięć wbudowanych funkcji obsługi typów:StreamHandler , Obsługa konsoli , Obsługa plików , Obsługa gniazd i MemoryHandler . Można jednak stworzyć nowy handler lub rozszerzyć jeden z nich jako personalizację. Programy obsługi określają, co zrobić z rekordem dziennika; na przykład może być utrwalany w lokalnym repozytorium lub przesyłany do serwera przez sieć. Java SE zawiera również dwa standardowe formatery:SimpleFormatter i XMLFormatter . Te formatery służą do formatowania LogRecord odpowiednio w formacie czytelnym dla człowieka i standardowym formacie XML.

Jest LogManager klasa, która śledzi globalne informacje o logowaniu, takie jak hierarchiczna przestrzeń nazw nazwanych Loggerów oraz zestaw właściwości kontrolnych rejestrowania z pliku konfiguracyjnego. Ma kluczowe znaczenie dla logowania w Javie i w dużej mierze kontroluje, co i gdzie należy rejestrować, w tym inne szczegóły inicjalizacji i tak dalej.

Prosty przykład logowania

Tworzenie rejestratora obiekt jest bardzo prosty. Oto bardzo prosty kod, który to zilustruje.

import java.util.logging.Logger;
public class App {
   private static Logger logger =
      Logger.getLogger(App.class.getName());
   public static void main(String[] args) {
      logger.info("This is a log message  !!!");
      logger.info("The name of the logger is " +
         logger.getName() + " nwhich is same as class name: "
            + App.class.getName());
   }
}

Rejestrator obiekty są zwykle nazywane za pomocą Ciągu wartość hierarchicznej przestrzeni nazw oddzielonej kropkami. W poprzednim przypadku jest taka sama jak nazwa klasy. Jednak nazwa może być dowolną wartością ciągu, ale zwykle nazwy są oparte na nazwie pakietu lub nazwie klasy rejestrowanego komponentu. Możliwe jest również utworzenie „anonimowego” rejestratora, który nie będzie przechowywany w Loggerze przestrzeń nazw.

Logowanie do zewnętrznego pliku przy użyciu formatowania XML

W poniższym kodzie komunikaty dziennika są przekierowywane do pliku za pomocą FileHandler .

Uwaga: Plik zostanie utworzony w katalogu projektu.

Obsługa plików może albo zapisywać do określonego pliku, albo do rotującego zestawu plików. Obracający się zestaw plików oznacza, że ​​starsze pliki są nazywane przez dodanie 0,1,2 itd. do podstawowej nazwy pliku. XMLFormatter jest domyślnym formatowaniem używanym przez FileHandler .

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
public class App {
   private static FileHandler fileHandler;
   private static Logger logger =
      Logger.getLogger(App.class.getName());
   public static void main(String[] args) throws
         IOException {
      fileHandler = new
         FileHandler(App.class.getName() + ".log");
      logger.setLevel(Level.ALL);
      logger.addHandler(fileHandler);
      logger.info("Log message redirected to a file");
      logger.info("The name of the logger is " +
         logger.getName() + 
            " nwhich is same as class name: "
            + App.class.getName());
   }
}

Logowanie do zewnętrznego pliku przy użyciu niestandardowego formatowania

Poprawimy nieco poniższy kod, aby dostosować formatowanie wiadomości. Zmienia to sposób, w jaki wiadomości są zapisywane w zewnętrznym pliku.

Uwaga: Obserwuj zawartość pliku dziennika o tym, jak zmieniło się formatowanie.
import java.io.IOException;
import java.util.logging.*;
public class App {
   private static FileHandler fileHandler;
   private static Logger logger =
      Logger.getLogger(App.class.getName());
   public static void main(String[] args) throws
         IOException {
      fileHandler = new
         FileHandler(App.class.getName() + ".log");
      logger.setLevel(Level.ALL);
      fileHandler.setFormatter(newCustomFormatter());
      logger.addHandler(fileHandler);
      logger.fine("Log message redirected to a file");
      logger.finer("The name of the logger is " +
         logger.getName());
      loggerfinest("This is same as class name: " +
         App.class.getName());
   }
   private static class CustomFormatter extends Formatter {
      private static final String format =
          "[%1$tF %1$tT] [%2$-4s] %3$s %n";
      public String format(LogRecord record) {
         returnString.format(format,
            record.getMillis(),
            record.getLevel().getLocalizedName(),
            record.getMessage());
      }
   }
}

To wszystko. Poeksperymentuj z logowaniem Java i wypróbuj wiele innych możliwości. W razie potrzeby zapoznaj się z dokumentami Java API.

Inne struktury rejestrowania w Javie

Czasami wygodnie jest użyć platformy rejestrowania innej firmy, a do wyboru jest sporo popularnych. Na przykład interfejs API rejestrowania dostarczany przez SLF4J wykorzystuje prosty wzór fasady, która jest warstwą abstrakcji, która umożliwia oddzielenie aplikacji od jej struktury rejestrowania. Log4j jest składniowo podobny do wbudowanego rejestrowania Java. Ma domyślną konfigurację do wyprowadzania wszystkich komunikatów dziennika do konsoli. Logback jest następcą Log4j i jest rozszerzeniem jego poprzednika. tinyLog to lekka platforma rejestrowania, której można używać zarówno z Javą, jak i Androidem.

Wniosek

Proces rejestrowania został zaprojektowany tak, aby był prosty i wydajny w dostarczaniu tego, co powinien. Możliwe jest szybkie rozpoczęcie pracy z interfejsami API rejestrowania w Javie. Projekt jest rozszerzalny i można go dostosować do końcowych potrzeb dewelopera. W tym artykule omówiono podstawy rejestrowania w Javie. Dla uproszczenia pominięto wiele skomplikowanych szczegółów. Zapoznaj się z dokumentacją Java API i innymi odpowiednimi dokumentami, aby uzyskać więcej informacji na ten temat.

Referencje

  • Omówienie logowania Java
  • Dokumentacja Java API

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie JShell w Javie 9 w NetBeans 9.0, część 3

  2. Jak czytać i interpretować błędy SQL

  3. Jak wybrać odpowiednie typy danych

  4. Dowiedz się, jak używać instrukcji CASE w SQL

  5. Jak ponumerować wiersze w SQL