Tässä opetusohjelmassa opitaan Java Loggingista ja sen eri komponenteista esimerkkien avulla.
Java antaa meille mahdollisuuden luoda ja siepata lokiviestejä ja tiedostoja kirjautumisprosessin avulla.
Java-sovelluksessa kirjaaminen vaatii kehykset ja sovellusliittymät. Java- java.util.logging
paketissa on sisäänrakennettu lokikehys .
Voimme käyttää myös kolmansien osapuolten puitteita, kuten Log4j, Logback ja monia muita puunkorjuuseen.
Java-kirjauskomponentit
Alla oleva kuva kuvaa Java Logging -sovellusliittymän ( java.util.logging
) ydinkomponentteja ja ohjauksen kulkua .

1. Logger
Logger
Luokka antaa menetelmät puunkorjuu. Voimme instantisoida Logger
luokan objektit ja kutsua sen menetelmiä lokitarkoituksiin.
Otetaan esimerkki.
Logger logger = Logger.getLogger("newLoggerName");
getLogger()
Menetelmää Logger
luokkaa käytetään löytää tai luoda uuden Logger
. Merkkijono-argumentti määrittelee kirjaajan nimen.
Tässä tämä luo uuden Logger
objektin tai palauttaa olemassa Logger
olevan samalla nimellä.
On yleinen tapa määritellä a Logger
nykyisen luokan jälkeen käyttämällä class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Huomaa: Tämä menetelmä heittää, NullPointerException
jos hyväksytty nimi on null
.
Jokaisella Logger
on taso, joka määrittää lokiviestin tärkeyden. Lokeja on 7:
Lokitaso (laskevassa järjestyksessä) | Käyttää |
---|---|
VAIKEA | vakava epäonnistuminen |
VAROITUS | varoitusviesti, mahdollinen ongelma |
TIEDOT | yleiset ajonaikaiset tiedot |
MÄÄRITÄ | kokoonpanotiedot |
HIENO | yleiset kehittäjätiedot (viestien jäljittäminen) |
FINER | yksityiskohtaiset tiedot kehittäjistä |
PARAS | erittäin yksityiskohtaiset kehittäjätiedot (viestien jäljittäminen) |
VINOSSA | poista kirjaaminen käytöstä kaikilla tasoilla (älä ota mitään) |
KAIKKI | ota loki käyttöön kaikilla tasoilla (sieppaa kaikki) |
Jokaisella lokitasolla on kokonaisluku, joka määrittää niiden vakavuuden lukuun ottamatta kahta erityistä lokitasoa OFF
ja ALL
.
Viestin kirjaaminen
Oletusarvoisesti kolme parasta lokitasoa kirjataan. Jos haluat asettaa toisen tason, voimme käyttää seuraavaa koodia:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
Tässä esimerkissä vain taso FINE
ja sen yläpuolella olevat tasot asetetaan kirjattavaksi. Kaikki muut lokiviestit pudotetaan.
Nyt kirjaamalla viesti käytämme log()
menetelmää.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
Haluttujen tasojen kirjaamiseen on olemassa lyhytmenetelmiä.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Kaikki lokipyynnöt, jotka ovat läpäisseet asetetun lokitason, välitetään sitten LogRecordiin .
Huomaa: Jos kirjaajan tasoksi on asetettu null
, sen taso peritään vanhemmaltaan ja niin edelleen puun yläpuolella.
2. Suodattimet
Suodatin (jos sellainen on) määrittää, onko LogRecord edelleenlähetettävä. Kuten nimestä voi päätellä, se suodattaa lokiviestit tiettyjen kriteerien mukaan.
LogRecord on vain johdetaan puunkaatajan lokikäsittelijä ja lokikäsittelijä ulkoisiin järjestelmiin, jos se läpäisee tietyn kriteerit.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. Käsittelijät (liitteet)
Lokin käsittelijä tai sen liitteet vastaanottavat LogRecordin ja vievät sen eri kohteisiin.
Java SE tarjoaa 5 sisäänrakennettua käsittelijää:
Käsittelijät | Käyttää |
---|---|
StreamHandler | kirjoittaa OutputStream |
ConsoleHandler | kirjoittaa konsoliin |
FileHandler | kirjoittaa tiedostoon |
SocketHandler | kirjoittaa TCP-etäportteihin |
MemoryHandler | kirjoittaa muistiin |
Käsittelijä voi välittää LogRecord- suodattimen selvittääkseen, voidaanko se edelleen lähettää ulkoisiin järjestelmiin vai ei.
Uuden käsittelijän lisäämiseen käytämme seuraavaa koodia:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
Käsittelijän poistamiseksi käytämme seuraavaa koodia:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
Loggerilla voi olla useita käsittelijöitä. Kaikkien käsittelijöiden saamiseksi käytämme seuraavaa koodia:
Handler() handlers = logger.getHandlers();
4. Muotoilijat
Käsittelijä voi myös käyttää Formatteria muotoilemaan LogRecord- objektin merkkijonoksi ennen sen viemistä ulkoisiin järjestelmiin.
Java SE: ssä on kaksi sisäänrakennettua muotoilijaa :
Muotoilijat | Käyttää |
---|---|
SimpleFormatter | muotoilee LogRecord- merkkijonon |
XMLFormatter | muotoilee LogRecordin XML-muotoon |
Voimme käyttää seuraavaa koodia muotoilemaan käsittelijän:
// formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter());
LogManager
LogManager kohteena seuraa maailmanlaajuisen puunkorjuun tiedot. Se lukee ja ylläpitää kirjauskokoonpanoa ja kirjaajan esiintymiä.
Lokinhallinta on yksittäinen, mikä tarkoittaa, että vain yksi ilmentymä siitä on instantioitu.
Lokihallinnan ilmentymän saamiseksi käytämme seuraavaa koodia:
LogManager manager = new LogManager();
Puunkorjuun edut
Tässä on joitain Java-kirjautumisen etuja.
- auttaa seuraamaan ohjelman kulkua
- auttaa sieppaamaan mahdollisia virheitä
- tarjoaa tukea ongelman diagnosointiin ja virheenkorjaukseen