V tomto tutoriále sa pomocou príkladov dozvieme o protokolovaní Java a jeho rôznych komponentoch.
Java nám umožňuje vytvárať a zachytávať správy a súbory protokolu prostredníctvom procesu prihlásenia.
V Jave vyžaduje protokolovanie rámce a API. Java má v java.util.logging
balíčku zabudovaný rámec na protokolovanie .
Na účely protokolovania môžeme tiež použiť rámce tretích strán, ako sú Log4j, Logback a mnohé ďalšie.
Komponenty protokolovania Java
Obrázok nižšie predstavuje základné komponenty a tok riadenia rozhrania Java Logging API ( java.util.logging
).

1. Logger
Logger
Trieda poskytuje metódy pre protokolovanie. Môžeme vytvoriť inštanciu objektov z Logger
triedy a zavolať jej metódy na účely prihlásenia.
Zoberme si príklad.
Logger logger = Logger.getLogger("newLoggerName");
getLogger()
Spôsob podľa Logger
triedy sa používa na nájdenie alebo vytvoriť novú Logger
. Reťazcový argument definuje názov protokolovacieho zariadenia.
Tu sa vytvorí nový Logger
objekt alebo sa vráti existujúci Logger
s rovnakým názvom.
Konvenciou je definovať Logger
po použití aktuálnej triedy class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Poznámka: Táto metóda hodí, NullPointerException
ak je zadaný názov null
.
Každá z nich Logger
má úroveň, ktorá určuje dôležitosť správy protokolu. Existuje 7 základných úrovní denníka:
Úroveň denníka (v zostupnom poradí) | Použite |
---|---|
ZÁVAŽNE | vážne zlyhanie |
VÝSTRAHA | varovná správa, potenciálny problém |
INFO | všeobecné informácie o behu |
KONFIG | informácie o konfigurácii |
FINE | všeobecné informácie pre vývojárov (sledovanie správ) |
FINERNEJŠIE | podrobné informácie pre vývojárov (sledovanie správ) |
NAJLEPŠIE | veľmi podrobné informácie pre vývojárov (sledovanie správ) |
VYPNUTÉ | vypnúť protokolovanie pre všetky úrovne (nič nezachytiť) |
VŠETKY | zapnúť logovanie na všetkých úrovniach (zachytiť všetko) |
Každá úroveň protokolu má celočíselnú hodnotu, ktorá určuje ich závažnosť, okrem dvoch špeciálnych úrovní protokolu OFF
a ALL
.
Protokolovanie správy
V predvolenom nastavení sa vždy zaznamenávajú najvyššie tri úrovne denníka. Na nastavenie inej úrovne môžeme použiť nasledujúci kód:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
V tomto príklade FINE
je nastavená na zaznamenávanie iba úroveň a úrovne nad ňou. Všetky ostatné správy denníka sú zrušené.
Teraz na prihlásenie správy použijeme log()
metódu.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
Existujú skratkové metódy prihlásenia na požadované úrovne.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Všetky požiadavky na denník, ktoré prešli nastavenou úrovňou denníka, sa potom preposielajú do LogRecordu .
Poznámka: Ak je úroveň protokolovača nastavená na null
, jeho úroveň sa zdedí od nadradeného objektu atď. V strome.
2. Filtre
Filter (ak je k dispozícii) určuje, či sa má protokol LogRecord posielať ďalej alebo nie. Ako už názov napovedá, filtruje správy protokolu podľa konkrétnych kritérií.
Záznam LogRecord sa odovzdáva zo záznamníka do obslužného programu denníkov a z obslužného programu denníkov do externých systémov, ak splní zadané kritériá.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. Obsluha (dodatok)
Obslužný program denníka alebo dodatky prijmú LogRecord a exportujú ho do rôznych cieľov.
Java SE poskytuje 5 vstavaných obslužných programov:
Manipulanti | Použite |
---|---|
StreamHandler | píše do OutputStream |
ConsoleHandler | píše do konzoly |
FileHandler | zapisuje do spisu |
SocketHandler | zapisuje na vzdialené porty TCP |
MemoryHandler | zapisuje do pamäti |
Obslužná rutina môže odovzdať protokol LogRecord do filtra, aby opäť určila, či je možné ho poslať ďalej do externých systémov alebo nie.
Ak chcete pridať nový obslužný program, použijeme nasledujúci kód:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
Na odstránenie obslužnej rutiny používame nasledujúci kód:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
Záznamník môže mať viac obslužných programov. Na získanie všetkých obslužných programov používame nasledujúci kód:
Handler() handlers = logger.getHandlers();
4. Formátory
Obsluha môže tiež použiť Formatter na naformátovanie objektu LogRecord na reťazec pred jeho exportom do externých systémov.
Java SE má dva zabudované formátory :
Formátovače | Použite |
---|---|
SimpleFormatter | formátuje LogRecord na reťazec |
XMLFormatter | formátuje formát LogRecord do XML |
Na formátovanie obslužnej rutiny môžeme použiť nasledujúci kód:
// formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter());
LogManager
Objekt LogManager sleduje informácie o globálnom protokolovaní. Číta a udržiava konfiguráciu protokolovania a inštancie protokolovacieho zariadenia.
Správca protokolov je jediný, čo znamená, že je inštancovaná iba jeho jedna inštancia.
Na získanie inštancie správcu protokolov používame nasledujúci kód:
LogManager manager = new LogManager();
Výhody ťažby dreva
Tu sú niektoré z výhod prihlásenia v Jave.
- pomáha pri sledovaní priebehu programu
- pomáha zachytiť všetky chyby, ktoré sa môžu vyskytnúť
- poskytuje podporu pre diagnostiku problémov a ladenie