Logare Java

intrare

Cred că nu este un secret pentru nimeni că ceea ce sunt loggers și de ce sunt necesare. În timpul existenței javai, au fost create numeroase cadre de înregistrare. Printre cele mai renumite sunt:







  • JUL - java.util.logging
  • log4j
  • JCL - jurnalizare logistică din Jakarta
  • Logback
  • SLF4J - fațadă simplă pentru java

System.err.println

Java.util.logging

Acest cadru este inclus în standard și vine cu JDK, deci nu este nevoie să descărcați altceva și să îl conectați. Are următoarele iulie niveluri de logare ascendenta: FINEST, Finer, FINE, CONFIG, INFO, AVERTIZAREA, Severă, precum ALL și OFF, și cuprinzând deconectarea toate nivelele, respectiv.
Loggerul este creat prin apelarea uneia dintre metodele statice ale clasei java.util.logging.Logger:

Metodele logger pot lua ca argumente mesaje șir, șabloane de mesaje, excepții, resurse de mesaje text localizate și, de asemenea, începând cu Java 8, furnizorii de mesaje șir:

Cu condiția ca două grupe de metode: numele care corespunde jurnalizarea și metodele jurnal, loggp, logrb, primind nivelul de logare ca parametru cu tipul de nivel. Primul grup conține metode de două tipuri: primirea unui mesaj șir sau a unui furnizor de mesaje de șir:

Al doilea grup de metode are următoarele variații:

Acum, să ne îndreptăm spre configurația cadrului. Implicit, JUL va imprima mesaje la consola, dar puteți specifica o configurație în fișierul de proprietăți. Pentru a specifica modul în care sunt afișate mesajele, este necesar ca loggerul dvs. să precizeze persoanele care le vor utiliza. Există următoarele clase de stivuitoare: FileHandler, ConsoleHandler, StreamHandler, SocketHandler, MemoryHandler. Iul. particularitate este că setările handler sunt, în general, pentru întreaga clasă, nu un caz particular care poate genera destul de multe probleme, de exemplu, dacă aveți nevoie de un alt mesaj de ieșire logger de la diferite fișiere sau diferite de formatare. Luați în considerare un exemplu simplu al fișierului de configurare:

Pentru ca JUL să aplice această configurație, trebuie să treci -Djava.util.logging.config.file = <путь до файла>, sau la începutul aplicației executați codul:

Acest cadru are în prezent oa doua versiune, care, din păcate, nu este compatibilă cu prima. De la prima versiune a log4j acolo pentru o lungă perioadă de timp și, având în vedere popularitatea sa mare, există destul de multe articole de pe Internet, astăzi ne uităm la a doua. Pentru a utiliza log4j2, trebuie să vă conectați bibliotecile log4j-api-2.x și log4j-core-2.x. Log4j are mai multe niveluri distincte de JUL de denumire de logare: TRACE, DEBUG, INFO, WARN, eroare, FATAL, precum și toate OFF și permite și dezactivează toate nivelurile, respectiv.
Loggerul este creat prin apelarea metodei statice a clasei org.apache.logging.log4j.Logger:

Logger știe să preia familia String, Object and Throwable la alte două tipuri noi - MapMessage și Marker:

În stilul clasic pentru loggeri, metodele sunt împărțite în două tipuri: cele care coincid cu numele nivelului de logare și metodele jurnalului care iau nivelul de logare ca parametru. Primul are forma:

Metodele de logare din log4j2 arată astfel:

Dacă nu specificați configurația, de pornire va da log4j2 mesajul supărat că configurația nu este setat și va imprima mesajul dvs. la nivelul consola nu mai mică de eroare. Configurația log4j2 este specificată în mai multe moduri: xml, json, yaml. Este de remarcat faptul că din cea de-a doua versiune nu există niciun suport de configurare din fișierul de proprietăți. Fișierul de configurare este căutat automat de calea de clasă, ar trebui să fie numit log4j2 și plasat în pachetul implicit.
Configurația log4j2 constă dintr-o descriere a loggerilor, a anexelor și a filtrelor. Pentru un studiu mai detaliat, consultați documentația, însă trebuie doar să notați câteva puncte-cheie. În primul rând, există diverse bunuri sub formă de filtre, inclusiv pe marcatori:

  • BurstFilter
  • CompositeFilter
  • DynamicThresholdFilter
  • MapFilter
  • MarkerFilter
  • RegexFilter
  • StructuredDataFilter
  • ThreadContextMapFilter
  • ThresholdFilter
  • TimeFilter






În al doilea rând, există o gamă largă de clase appenderov, inclusiv asincron și appendery appendery înfășurarea unui grup de alte appenderov:

  • AsyncAppender
  • ConsoleAppender
  • FailoverAppender
  • FileAppender
  • FlumeAppender
  • JDBCAppender
  • JMSAppender
  • JPAAppender
  • MemoryMappedFileAppender
  • NoSQLAppender
  • OutputStreamAppender
  • RandomAccessFileAppender
  • RewriteAppender
  • RollingFileAppender
  • RollingRandomAccessFileAppender
  • RoutingAppender
  • SMTPAppender
  • SocketAppender
  • SyslogAppender

Este, de asemenea, de remarcat faptul că log4j poate crea mai multe apendice diferite ale aceleiași clase, de exemplu, mai multe anexe de fișiere care scriu în fișiere diferite.
Luați în considerare exemplul unei configurații în care cele două logger declarate (și rădăcină pentru clasa noastră), primul dintre care scrie în fișierul log.log, iar al doilea scrie în log2.log folosind filtrarea pe marcatorul:

Commons-logare

Destul de vechi proiect, care este un wrapper peste JUL și log4j, care nu introduce nici o funcționalitate suplimentară. Nivelurile de logare în JCL sunt aceleași ca și log4j, iar în cazul interacțiunii cu JUL, apare următoarea mapare:

Pentru a utiliza JCL, conectați commons-logging-1.x.jar. Creați un logger apelând metoda din fabrică:

Metodele JCL sunt foarte simple, coincid cu numele nivelurilor de logare, acceptă doar obiecte și excepții și au două variante:

Configurația JCL conține blocuri separate pentru log4j, JUL și implementarea proprie. Dacă nu specificați o configurație, utilizați propria implementare, numită SimpleLog, care afișează mesaje către consola. Luați în considerare un exemplu de fișier de configurare:

Puteți specifica fișierul de configurare JCL după cum urmează:

Acest cadru este utilizat numai împreună cu ambalajul SLF4J, pe care îl vom lua în considerare ulterior. Pentru a începe, aveți nevoie de logback-core-1.x.jar și logback-classic-1.x.x.jar. precum și slf4j-api-1.x.x.jar.
Interacțiunea cu loggerul va fi efectuată prin API-ul furnizat de ambalajul SLF4J. Nivelurile de logare sunt aceleași cu log4j. În acest caz, crearea unui logger arată astfel:

API vă permite să trimiteți mesaje șir, șabloane de mesaje șir, excepții și să utilizați și marcaje:

Numele metodelor coincid cu nivelurile de exploatare și au forma:

Acum, luați în considerare logging-ul funcțional direct. Configurația este căutată în clasă în următoarea ordine:

  1. Încercarea de a găsi logback.groovy
  2. În caz contrar, încearcă să găsească logback-test.xml
  3. În caz contrar, încearcă să găsească logback.xml
  4. În caz contrar, se utilizează configurația de bază - mesajele de ieșire către consola

Elementele principale de configurare sunt înregistratorii, anexele, lajauturile și filtrele.
Sunt disponibile următoarele filtre:

  • Filtre regulate
  • LevelFilter
  • ThresholdFilter
  • EvaluatorFilter
  • matchers
  • TurboFilters
  • CountingFilter

Sunt disponibile următoarele anexe:

  • OutputStreamAppender
  • ConsoleAppender
  • FileAppender
  • RollingFileAppender
  • SocketAppender și SSLSocketAppender
  • ServerSocketAppender și SSLServerSocketAppender
  • SMTPAppender
  • SyslogAppender
  • SiftingAppender
  • AsyncAppender

Faptul că astfel de aspectele și Encodere în logback vă invităm să citiți în detaliu în documentația, iar acum dau doar un simplu exemplu de fișier logback.xml:

Așa cum am menționat mai devreme SLF4J împachetări peste logback, precum și pe iul., log4j, sau JCL, precum și față de orice logger care implementează interfața sa. Pentru a lucra cu biblioteca necesare SLF4J slf4j-api-1.x.x.jar și punerea în aplicare a unuia dintre loggerii sau fișa. Ca regulă generală, punerea în aplicare a tuturor loggere (cu excepția logback) livrate cu SLF4J și au nume pe similaritatea slf4j-JCL-1.x.jar, slf4j-log4j12-1.x.jar, slf4j-NOP-1.x.jar și așa mai departe. n. În cazul în care se constată classpath punerea în aplicare a logger (sau NOP priza) SLF4J rugnetsya furios și refuză să lucreze. Configurația va fi căutată corespunzător, în funcție de punerea în aplicare a cursului de clasă.
API SLF4J am examinat în paragraful anterior, deci să luăm în considerare încă o posibilitate a ambalajului. Într-o lume ideală, trebuie să afișeze mesaje prin intermediul interfeței înveliș, iar apoi vom fi bine, dar lumea crudă reală spune că noi toți trebuie să interacționeze cu biblioteci terță parte, sau un cod care utilizează logger și care știu nu știu despre SLF4J . Acest lucru nu va ajusta la fiecare logger și lăsați lucrurile să ia mesajele lor prin intermediul interfeței SLF4J o implementare, puteți utiliza punte. Alimentarea bibliotecii înveliș conținut JCL-over-slf4j.jar, log4j-over-slf4j.jar și-la-iulie slf4j.jar, care va suprascrie comportamentul logger de date relevante și redirecționa mesaje la înveliș.
Ceea ce ar deveni mai clar este cel de mai sus, luați în considerare un exemplu. Să presupunem că avem următorii loggeri:

Vrem ca mesajul de la JUL să fie scris într-un fișier, de la log4j la altul și de la slf4j la consola. Odată cu implementarea pachetului vom folosi logback, configurația acestei rușine va arăta astfel:

Pentru a realiza podul, este necesar să executați codul:

Vreau să știu mai mult

concluzie

În concluzie, aș dori să vă spun că alegerea finală a cadrului de înregistrare rămâne întotdeauna a ta, dar trebuie să fii conștient de acest lucru. Alegerea ar trebui să fie satisfacerea condiționată a multor criterii, cum ar fi de înaltă performanță, ușor de utilizat API, disponibilitatea mijloacelor de stocare a datelor înregistrate și specificul proiectului, de exemplu, în cazul în care produsul va fi utilizat în alte proiecte, nu este necesar să se rezolve pentru utilizatorul cum logger este necesar să se utilizeze, și în locul acestui lucru dați preferință învelișului.







Articole similare

Trimiteți-le prietenilor: