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.logging
balíč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
).

1. Logger
Logger
Třída poskytuje metody pro protokolování. Můžeme vytvořit instanci objektů z Logger
třídy a zavolat její metody pro účely protokolování.
Vezměme si příklad.
Logger logger = Logger.getLogger("newLoggerName");
getLogger()
Způsob podle Logger
třídy se používá k nalezení nebo vytvořit novou Logger
. Řetězcový argument definuje název loggeru.
Zde se vytvoří nový Logger
objekt nebo se vrátí existující Logger
se stejným názvem.
Jedná se o konvenci k definování Logger
po aktuální třídě pomocí class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Poznámka: Tato metoda vyvolá, NullPointerException
pokud je předané jméno null
.
Každý z nich Logger
má ú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 OFF
a 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 FINE
je 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ů