Java-kirjauskehys - Java logging framework

Java puunkorjuu puitteet on tietokone tiedonkeruu paketti Java . Tämä artikkeli kattaa yleiskäyttöiset kirjauskehykset.

Kirjaaminen viittaa toiminnan tallentamiseen sovelluksella ja on yleinen ongelma kehitystiimeille. Kirjauskehykset helpottavat ja standardoivat kirjaamisprosessia Java-alustalle. Erityisesti ne tarjoavat joustavuutta välttämällä nimenomaista ulostuloa konsolille (katso Liite alla). Lokien kirjoittamispaikka tulee riippumattomaksi koodista ja voidaan mukauttaa ajon aikana.

Valitettavasti JDK ei sisällyttänyt kirjaamista alkuperäiseen julkaisuunsa, joten siihen mennessä, kun Java Logging -sovellusliittymä lisättiin, useita muita kirjauskehyksiä oli tullut laajalti käytettyjä - erityisesti Apache Commons Logging (tunnetaan myös nimellä Java Commons Logging tai JCL) ja log4j . Tämä johti ongelmiin integroimalla erilaisia ​​kolmansien osapuolten kirjastoja (JAR) kumpikin käyttäen erilaisia ​​lokikehyksiä. Tämän ongelman ratkaisemiseksi kehitettiin liitettävät puunkorjuukehykset (kääreet).

Toiminnan yleiskatsaus

Kirjaaminen on tyypillisesti jaettu kolmeen pääosaan: Logger, Formatter ja Appender (tai Handler).

  • Lokitallentaja on vastuussa kirjattavan viestin sieppaamisesta yhdessä tiettyjen metatietojen kanssa ja välittämisestä lokikehykseen.
  • Saatuaan viestin kehys kutsuu muotoilijan sanomalla, joka muotoilee sen tulostettavaksi.
  • Kehys antaa sitten muotoillun viestin asianomaiselle Appender / Handlerille hävitettäväksi. Tähän voi sisältyä ulostulo konsolinäyttöön, kirjoittaminen levylle, liittyminen tietokantaan tai sähköpostin luominen.

Yksinkertaisemmat lokikehykset , kuten Object Guyn kirjauskehys, yhdistävät kirjaajan ja liitännän. Tämä yksinkertaistaa oletusarvoista toimintaa, mutta sitä ei voida helposti konfiguroida, varsinkin jos projektia siirretään ympäristöstä toiseen.

Logger

Logger on objekti, jonka avulla sovellus voi kirjautua riippumatta siitä, mihin lähtö lähetetään / tallennetaan. Sovellus kirjaa viestin välittämällä objektin tai objektin ja valinnaisella vakavuustasolla olevan poikkeuksen lokiobjektille tietyllä nimellä / tunnuksella.

Nimi

Loggerilla on nimi. Nimi on yleensä jäsennelty hierarkkisesti, jolloin pisteet (.) Erottavat tasot. Yleinen järjestelmä on käyttää lokia tai kirjaa suorittavan luokan tai paketin nimeä. Sekä log4j ja Java hakkuut API tukea määriteltäessä käsittelijät ylempänä hierarkiassa.

Esimerkiksi kirjaajan nimi voi olla " com.sun.some.UsefulClass ". Käsittelijä voidaan määrittää jollekin seuraavista:

  • com
  • com.sun
  • com.sun.some
  • com.sun.some.UsefulClass

Niin kauan kuin tässä pinossa on määritelty käsittelijä, kirjaamista voi tapahtua. Esimerkiksi com.sun.some.UsefulClass kirjaajaan kirjattu viesti voi olla käsittelijän kirjoittama com.sun . Tyypillisesti on maailmanlaajuinen käsittelijä, joka vastaanottaa ja käsittelee minkä tahansa kirjaajan luomia viestejä.

Vakavuusaste

Viesti kirjataan tietyllä tasolla. Yleiset tason nimet kopioidaan Apache Commons Loggingista (vaikka Java Logging -sovellusliittymä määrittelee eri tason nimet):

Yhteiset tasot
Taso Kuvaus
FATAL Vakavat virheet, jotka aiheuttavat ennenaikaisen irtisanomisen. Oletettavasti nämä näkyvät välittömästi tilakonsolissa.
VIRHE Muut ajonaikaiset virheet tai odottamattomat olosuhteet. Oletettavasti nämä näkyvät välittömästi tilakonsolissa.
VAROITUS Vanhentuneiden sovellusliittymien käyttö, API: n huono käyttö, "melkein" virheet, muut ajonaikaiset tilanteet, jotka ovat ei-toivottuja tai odottamattomia, mutta eivät välttämättä "vääriä". Oletettavasti nämä näkyvät välittömästi tilakonsolissa.
TIEDOT Mielenkiintoisia ajonaikaisia ​​tapahtumia (käynnistys / sammutus). Odota, että nämä näkyvät välittömästi konsolissa, joten ole konservatiivinen ja pidä sitä minimissä.
VIRHEET yksityiskohtaiset tiedot virtauksesta järjestelmän läpi. Oletetaan, että nämä kirjoitetaan vain lokeihin.
JÄLJITTÄÄ tarkempia tietoja. Oletetaan, että nämä kirjoitetaan vain lokeihin.

Kirjauskehys ylläpitää jokaisen kirjaajan nykyisen kirjaustason. Kirjaustaso voidaan asettaa enemmän tai vähemmän rajoittavaksi. Esimerkiksi, jos lokitason tasoksi on asetettu "VAROITUS", kaikki kyseisen tason tai sitä korkeammat viestit kirjataan: ERROR ja FATAL.

Vakavuusaste voidaan määrittää sekä kirjaajille että liitteille. Molemmat on oltava käytössä tietyn vakavuustason tuottamiseksi. Joten virheenkorjausulostuloa varten sallittu kirjaaja ei tuota lähtöä, jos viestin vastaanottava käsittelijä ei ole myöskään mahdollista virheenkorjausta.

Suodattimet

Suodattimet aiheuttavat lokitapahtuman ohittamisen tai kirjaamisen. Yleisimmin käytetty suodatin on edellisessä osassa dokumentoitu lokitase. Lokikehykset, kuten Log4j 2 ja SLF4J, tarjoavat myös markkereita, joita lokitapahtumaan kiinnitettynä voidaan käyttää myös suodattamiseen. Suodattimia voidaan käyttää myös lokitapahtumien hyväksymiseen tai hylkäämiseen heitettävien poikkeusten, lokiviestin tietojen, lokiohjelmointirajapinnan kautta paljastetun ThreadLocalin tietojen tai useiden muiden menetelmien perusteella.

Muotoilijat, asettelut tai renderöijät

Formatter on objekti, joka muotoilee tietyn objektin. Enimmäkseen tämä koostuu binäärisen objektin ottamisesta ja muuntamisesta merkkijonon esitykseksi. Jokainen kehys määrittelee oletusulostulomuodon, joka voidaan haluttaessa ohittaa.

Lisäykset tai käsittelijät

Hakijat kuuntelevat viestejä, jotka ovat vähintään tietyn vakavuuden vähimmäistason. Hakija ottaa välitetyn viestin ja lähettää sen asianmukaisesti. Viestiasetukset sisältävät:

  • näyttö konsolissa
  • kirjoita tiedostoon tai syslogiin
  • Liitä tietokantataulukkoon
  • jakelu Java Messaging Services -palvelun kautta
  • Lähetä sähköpostitse
  • kirjoita pistorasiaan
  • hylätä "bit-bucket" (/ dev / null)

Ominaisuuksien vertailu

Taulukko 1 - Ominaisuudet
Kehys Tyyppi Tuetut lokitasot Tavalliset lisäykset Kommentit Kustannukset / lisenssi
Log4J Kirjauskehys FATAL ERROR WARN INFO DEBUG TRACE Liian monta lueteltavaa: Katso Liite-ohjeet Laajasti käytössä monissa projekteissa ja alustoissa. Log4j 1 julistettiin "käyttöiän päättymiseksi" vuonna 2015, ja se on korvattu Log4j 2: lla, joka tarjoaa API: n, jota voidaan käyttää yhdessä muiden kirjaustoteutusten kanssa, sekä kyseisen sovellusliittymän toteutuksen.
Apache-lisenssi, versio 2.0
Java Logging -sovellusliittymä Kirjauskehys SEVERE WARNING INFO CONFIG FINE FINER FINEST Sunin Java-virtuaalikoneella (JVM) on seuraavat: ConsoleHandler, FileHandler, SocketHandler, MemoryHandler Mukana JRE
tinylog Kirjauskehys ERROR WARNING INFO DEBUG TRACE ConsoleWriter, FileWriter, LogcatWriter, JdbcWriter, RollingFileWriter, SharedFileWriter ja null (hylkää kaikki lokimerkinnät) Apache-lisenssi, versio 2.0
Takaisin Kirjauskehys ERROR WARN INFO DEBUG TRACE Liian monta luetteloitavaa: katso Appender JavaDoc Kehitetty korvaamaan log4j, monilla parannuksilla. Lukuisat projektit, tyypillisesti slf4j: n takana, kuten Akka , Apache Camel , Apache Cocoon , Artifactory , Gradle , Lift Framework , Play Framework , Scalatra , SonarQube , Spring Boot , ... LGPL , versio 2.1
Apache Commons -loki (JCL) Kirjauskääre FATAL ERROR WARN INFO DEBUG TRACE Riippuu taustalla olevasta kehyksestä Laajasti käytetty, usein yhdessä log4j: n kanssa Apache-lisenssi, versio 2.0
SLF4J Kirjauskääre ERROR WARN INFO DEBUG TRACE Riippuu taustalla olevasta kehyksestä, joka on liitettävissä. Tarjoaa API-yhteensopivat välilevyt JCL-, JDK- ja log4j-lokipaketeille. Se voi myös käyttää mitä tahansa niistä tuotoksen tuottamiseen. Oletusasetuksena on käyttää Logbackia lähtöä varten, jos se on käytettävissä. Käytetään laajalti monissa projekteissa ja alustoissa, usein Logback toteutuksena. MIT-lisenssi

Huomioita

JCL ja Log4j ovat hyvin yleisiä yksinkertaisesti siksi, että ne ovat olleet olemassa niin kauan ja olivat ainoat valinnat pitkään aikaan. Slf4j: n joustavuus (Logbackin käyttäminen alla) on tehnyt siitä suositun valinnan.

SLF4J on joukko puunkääreitä (tai välilevyjä), joiden avulla se voi jäljitellä muita kehyksiä. Siten useita kolmannen osapuolen kirjastoja voidaan sisällyttää sovellukseen riippumatta lokikehyksestä, jonka kukin on valinnut käytettäväksi. Kaikki lokilähtö tuotetaan kuitenkin tavalliseen tapaan, tyypillisesti Logbackin kautta.

Log4j 2 tarjoaa sekä sovellusliittymän että toteutuksen. API voidaan reitittää muihin lokinhallintatoteutuksiin, jotka vastaavat SLF4J: n toimintaa. Toisin kuin SLF4J, Log4j 2 -sovellusliittymä kirjaa viestiobjektit merkkijonojen sijasta lisää joustavuutta varten ja tukee myös Java Lambda -lausekkeita.

JCL ei todellakaan ole puunkorjuukehys, vaan kääre yhdelle. Sellaisena se vaatii kirjauskehyksen sen alle, vaikka se voi oletusarvoisesti käyttää omaa SimpleLog kirjaajaa.

JCL, SLF4J ja Log4j 2 -sovellusliittymä ovat hyödyllisiä kehitettäessä uudelleenkäytettäviä kirjastoja, jotka on kirjoitettava mihin tahansa sovelluksen käytössä olevaan kirjausjärjestelmään. Tämä tarjoaa myös joustavuutta heterogeenisissä ympäristöissä, joissa puunkorjuukehys todennäköisesti muuttuu, vaikka useimmissa tapauksissa, kun puunkorjuukehys on valittu, sitä ei tarvitse muuttaa projektin elinkaaren aikana. SLF4J ja Log4j 2 hyötyvät uudemmista ja hyödyntävät vanhemmista kehyksistä saatuja kokemuksia. Lisäksi JCL: llä on tunnettuja ongelmia luokkakuormaajien kanssa määritettäessä, minkä kirjauskirjaston sen pitäisi kääriä, mikä on nyt korvannut JCL: n.

Java Logging -sovellusliittymä toimitetaan Java-ohjelmalla. Vaikka sovellusliittymä on teknisesti erillinen Java: n toimittamasta oletustoteutuksesta, sen korvaaminen vaihtoehtoisella toteutuksella voi olla haastavaa, joten monet kehittäjät sekoittavat tämän toteutuksen Java Logging -sovellusliittymään. Kokoonpano tapahtuu vain ulkoisten tiedostojen avulla, joita ei ole helppo muuttaa lennossa (muut kehykset tukevat ohjelmallista määritystä). Oletustoteutus tarjoaa vain muutaman käsittelijän ja muotoilijan, mikä tarkoittaa, että useimpien käyttäjien on kirjoitettava omat.

Katso myös

Viitteet

Ulkoiset linkit