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ů








