Protokolování Java

V tomto tutoriálu se pomocí příkladů seznámíme s protokolováním Java a jeho různými komponentami.

Java nám umožňuje vytvářet a zaznamenávat zprávy a soubory protokolu prostřednictvím procesu protokolování.

V Javě vyžaduje protokolování rámce a API. Java má v java.util.loggingbalíčku zabudovaný rámec protokolování .

Pro účely protokolování můžeme také použít rámce třetích stran, jako je Log4j, Logback a mnoho dalších.

Komponenty protokolování Java

Obrázek níže představuje základní součásti a tok řízení rozhraní Java Logging API ( java.util.logging).

Protokolování Java

1. Logger

LoggerTřída poskytuje metody pro protokolování. Můžeme vytvořit instanci objektů z Loggertřídy a zavolat její metody pro účely protokolování.

Vezměme si příklad.

 Logger logger = Logger.getLogger("newLoggerName"); 

getLogger()Způsob podle Loggertřídy se používá k nalezení nebo vytvořit novou Logger. Řetězcový argument definuje název loggeru.

Zde se vytvoří nový Loggerobjekt nebo se vrátí existující Loggerse stejným názvem.

Jedná se o konvenci k definování Loggerpo aktuální třídě pomocí class.getName().

 Logger logger = Logger.getLogger(MyClass.class.getName()); 

Poznámka: Tato metoda vyvolá, NullPointerExceptionpokud je předané jméno null.

Každý z nich Loggermá úroveň, která určuje důležitost zprávy protokolu. Existuje 7 základních úrovní protokolu:

Úroveň protokolu (v sestupném pořadí) Použití
TĚŽKÉ vážné selhání
VAROVÁNÍ varovná zpráva, potenciální problém
INFO obecné informace o běhu
KONFIG informace o konfiguraci
POKUTA obecné informace pro vývojáře (trasování zpráv)
FINER podrobné informace pro vývojáře (trasování zpráv)
NEJLEPŠÍ velmi podrobné informace pro vývojáře (trasování zpráv)
VYPNUTO vypnout protokolování pro všechny úrovně (nic nezachytit)
VŠECHNO zapnout protokolování pro všechny úrovně (zachytit vše)

Každá úroveň protokolu má celočíselnou hodnotu, která určuje jejich závažnost, kromě dvou speciálních úrovní protokolu OFFa ALL.

Protokolování zprávy

Ve výchozím nastavení jsou vždy zaznamenány první tři úrovně protokolu. K nastavení jiné úrovně můžeme použít následující kód:

 logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE); 

V tomto příkladu FINEje nastavena protokolování pouze úrovně a úrovní nad ní. Všechny ostatní zprávy protokolu jsou zrušeny.

Nyní k přihlášení zprávy použijeme log()metodu.

 logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message"); 

Existují zkratkové metody protokolování na požadovaných úrovních.

 logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message"); 

Všechny požadavky na protokol, které prošly nastavenou úrovní protokolu, jsou poté předány do LogRecord .

Poznámka: Pokud je úroveň záznamníku nastavena na null, jeho úroveň se zdědí od nadřazeného objektu atd. Nahoře ve stromu.

2. Filtry

Filtr (je-li k dispozici) určuje, zda má být LogRecord přeposlán nebo ne. Jak název napovídá, filtruje zprávy protokolu podle konkrétních kritérií.

LogRecord je předán pouze od ústředny k psovoda protokolu az psovoda log na externí systémy, pokud to projde zadaným kritériím.

 // set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter(); 

3. Obsluha (dodatky)

Obslužná rutina protokolu nebo dodatky obdrží LogRecord a exportují jej do různých cílů.

Java SE poskytuje 5 integrovaných obslužných programů:

Manipulátory Použití
StreamHandler píše do OutputStream
ConsoleHandler zapisuje do konzoly
FileHandler zapíše do souboru
SocketHandler zapisuje na vzdálené porty TCP
MemoryHandler zapisuje do paměti

Obslužná rutina může předat LogRecord filtru, aby znovu určila, zda jej lze předat externím systémům, či nikoli.

Chcete-li přidat novou obslužnou rutinu, použijeme následující kód:

 logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); 

K odebrání obslužné rutiny používáme následující kód:

 logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler); 

Záznamník může mít více obslužných programů. Chcete-li získat všechny obslužné rutiny, použijeme následující kód:

 Handler() handlers = logger.getHandlers(); 

4. Formátory

Obslužná rutina může také použít Formatter k formátování objektu LogRecord na řetězec před exportem do externích systémů.

Java SE má dva vestavěné formátory :

Formátovače Použití
SimpleFormatter formáty LogRecord na řetězec
XMLFormatter formáty LogRecord do formátu XML

K formátování obslužné rutiny můžeme použít následující kód:

 // formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter()); 

LogManager

Objekt LogManager sleduje informace o globálním protokolování. Čte a udržuje konfiguraci protokolování a instance protokolovače.

Správce protokolů je singleton, což znamená, že je vytvořena instance pouze jedné jeho instance.

K získání instance správce protokolů používáme následující kód:

 LogManager manager = new LogManager(); 

Výhody protokolování

Zde jsou některé z výhod protokolování v Javě.

  • pomáhá při sledování toku programu
  • pomáhá při zachycení případných chyb, které se mohou vyskytnout
  • poskytuje podporu pro diagnostiku a ladění problémů

Zajímavé články...