sql >> Databáze >  >> RDS >> Database

Naučte se základy protokolování Java

Java začlenila logovací API knihovnu jako součást svého rámce od JDK 1.4. Dnes se jedná o vestavěnou podporu od Javy. Tato knihovna je však přizpůsobitelná a rozšiřitelná v tom smyslu, že můžeme použít jedno nebo více alternativních řešení protokolování poskytovaných knihovnami třetích stran. Ačkoli tato řešení třetích stran mají odlišný přístup k vytváření dat protokolu, v konečném důsledku sdílejí stejný cíl protokolování zpráv z běhového prostředí aplikace. Tento článek zkoumá základy protokolování a ukazuje, jak jej lze použít v programu Java.

Protokolování Java

Protokol obvykle znamená udržování nějakého druhu záznamu. Z hlediska programování se jedná o proces zapisování zpráv do log souboru během provádění programu. Na trvalé protokoly zpráv se obvykle odkazuje programátor, aby shromáždil určité statistické informace za běhu, které při analýze mohou odhalit nepředvídané situace. Ve skutečnosti může být mnoho různých důvodů, proč se protokolování používá, a toto je jen jeden z nich. Podle dokumentace Java API existují čtyři primární použití protokolování:

  • Pro diagnostiku problémů koncovými uživateli a správci systému.
  • Pro servisní techniky je vhodné diagnostikovat problém z protokolovaných zpráv a rychle jej opravit.
  • Vývojová organizace může sledovat vnitřní provádění konkrétního subsystému a analyzovat jej.
  • Vývojáři mohou ladit vyvíjenou aplikaci tím, že získají rychlý přehled o základním problému z protokolovaných zpráv.

Protokolování Java API je navrženo nenákladným způsobem v tom smyslu, že jej lze ponechat jako zbytek i v produkční aplikaci. To nevytváří příliš velkou režii na efektivitu provádění programu. Rozhraní API poskytuje mechanismus pro dynamickou změnu vytváření zpráv protokolu tak, aby bylo možné minimalizovat dopad protokolování během operací, které vyžadují maximální efektivitu. API se skládá z řady tříd a rozhraní, které lze přizpůsobit jejich rozšířením. Celé protokolovací API je zabaleno pod java.util.logging . Třídy a rozhraní v tomto balíčku poskytují základní funkce protokolování v Javě.

Úrovně protokolování

Naléhavost přihlášení v programu Java lze rozdělit do několika úrovní. Vyrovnáním nahoru a dolů můžeme zvýšit nebo snížit náklady na protokolování v produkční aplikaci. Takto kontrolujeme efektivitu spouštění aplikace tam, kde je nutné zaznamenat jednu nebo více jejích událostí. Toho je dosaženo prostřednictvím třídy nazvané Úroveň , který definuje důležitost těžby dřeva. Úroveň protokolu je uspořádána a specifikována pomocí static celočíselné konstanty, například:

  • Úroveň. VŠE: Všechny zprávy jsou protokolovány bez ohledu na důležitost
  • Úroveň. VYP: Protokolování je vypnuto
  • Úroveň. SEVERE: Označuje vážné selhání; musí být přihlášen
  • Úroveň. UPOZORNĚNÍ: Označuje varovné zprávy
  • Úroveň.INFO: Informační zpráva za běhu
  • Level.CONFIG: Statické konfigurační zprávy
  • Úroveň.FINE: Sledování zpráv
  • Level.FINER: Podrobné zprávy o sledování
  • Level.FINEST: Vysoce podrobné zprávy o sledování

Součásti protokolování

Potřebujeme Logger instanci provést jakýkoli druh přihlášení v Javě. Tato instance je zodpovědná za protokolování dat do LogRecord . LogRecord instance se používají k předávání požadavků na protokolování mezi rámcemi protokolování a jednotlivými obslužnými rutinami protokolů. Java SE poskytuje pět typů vestavěných obslužných programů:StreamHandler , ConsoleHandler , FileHandler , SocketHandler a MemoryHandler . Je však možné vytvořit nový obslužný program nebo jeden z nich rozšířit jako přizpůsobení. Obslužné rutiny určují, co dělat se záznamem protokolu; například může být uložen v místním úložišti nebo jej předat serveru přes síť. Java SE také obsahuje dva standardní formátovače:SimpleFormatter a XMLFormatter . Tyto formátovače se používají k formátování LogRecord do formátu čitelného pro člověka a do standardního formátu XML.

Existuje LogManager třída, která sleduje informace o globálním protokolování, jako je hierarchický jmenný prostor pojmenovaných Loggers a sadu vlastností řízení protokolování z konfiguračního souboru. Je ústřední pro přihlašování v Javě a do značné míry řídí, co se má protokolovat, kam se protokoluje, včetně dalších inicializačních podrobností atd.

Příklad jednoduchého protokolování

Vytvoření Loggeru objekt je velmi jednoduchý. Zde je velmi jednoduchý kód, který to ilustruje.

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());
   }
}

Protokol objekty jsou obvykle pojmenovány pomocí řetězce hodnotu hierarchického jmenného prostoru odděleného tečkami. V předchozím případě je stejný jako název třídy. Název však může být libovolná řetězcová hodnota, ale obvykle jsou názvy založeny na názvu balíčku nebo názvu třídy protokolované komponenty. Je také možné vytvořit „anonymní“ záznamník, který nebude uložen v Loggeru jmenný prostor.

Přihlášení k externímu souboru pomocí formátování XML

V následujícím kódu jsou zprávy protokolu přesměrovány do souboru pomocí FileHandler .

Poznámka: Soubor bude vytvořen v adresáři projektu.

FileHandler může zapisovat buď do určeného souboru, nebo může zapisovat do rotující sady souborů. Rotující sada souborů znamená, že starší soubory jsou pojmenovány přidáním 0,1,2 a tak dále do základního názvu souboru. XMLFormatter je výchozí formátování používané 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());
   }
}

Přihlášení do externího souboru pomocí vlastního formátování

Následující kód trochu upravíme, abychom přizpůsobili formátování zprávy. Tím se změní způsob zápisu zpráv do externího souboru.

Poznámka: Sledujte obsah souboru protokolu o tom, jak se změnilo formátování.
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 je vše. Experimentujte s protokolováním Java a vyzkoušejte mnoho dalších možností. Kdekoli je to nutné, nahlédněte do dokumentů Java API.

Další protokolovací rámce v Javě

Někdy je vhodné použít protokolovací rámec třetí strany a na výběr je několik oblíbených. Například protokolovací API poskytované SLF4J používá jednoduchý vzor fasády, což je abstraktní vrstva, která umožňuje aplikaci oddělit od jejího protokolovacího rámce. Log4j je syntakticky podobný vestavěnému protokolování Java. Má výchozí konfiguraci pro výstup všech zpráv protokolu do konzoly. Logback je nástupcem Log4j a je rozšířením jeho předchůdce. tinyLog je lehký protokolovací rámec, který lze použít s Javou i Androidem.

Závěr

Proces protokolování je navržen tak, aby byl jednoduchý a účinný při plnění toho, co má dělat. Je možné rychle začít s protokolováním API v Javě. Design je rozšiřitelný a lze jej přizpůsobit podle konečných potřeb vývojáře. Tento článek je letmým pohledem do základů protokolování Java. Pro jednoduchost je vynecháno mnoho složitých detailů. Prostudujte si dokumentaci Java API a další příslušné dokumenty, kde najdete další podrobnosti.

Odkazy

  • Přehled protokolování Java
  • Dokumentace Java API

  1. Proč Postgres nepoužívá index?

  2. Bez ohledu na to vrátit výchozí výsledek pro hodnotu IN

  3. Funkční jednotky

  4. Jak získat data za poslední měsíc v MySQL