logo

Log4j vs SLF4J

SLF4J (Simple Logging Faade for Java) on API, joka on suunniteltu antamaan yleinen pääsy moniin kirjauskehyksiin, joista log4j on yksi niistä.

Se on pohjimmiltaan abstraktiokerros. Se ei ole kirjaustoteutus. Se tarkoittaa, että jos kirjoitat kirjastoa ja käytät SLF4J:tä, voit antaa kirjaston jonkun muun käytettäväksi ja he voivat valita, mitä lokitoteutusta käytetään SLF4J:n kanssa, esim. log4j tai Java-lokisovellusliittymä. Sitä käytetään estämään sovelluksia olemasta riippuvaisia ​​erilaisista kirjaussovellusliittymistä, kuten ne käyttävät niistä riippuvia kirjastoja.

Tarkastelemme kuitenkin Log4J:n ja SLF4J:n välistä eroa, joka ansaitsee vain yhden rivin vastauksen. eli itse kysymys on väärä. SLF4J ja Log4J ovat erilaisia ​​tai ne eivät ole samanlaisia ​​komponentteja. Kuten nimessä on määritelty, SLF4J on yksinkertainen loki-faadi Javalle. Se ei ole kirjauskomponentti, eikä se edes tee varsinaista kirjausta. Se on vain abstraktiokerros alla olevalle lokikomponentille.

tulosta tähtikuvio

Siinä tapauksessa että Log4j , se on lokikomponentti, ja se tekee ohjeen mukaan kirjaamisen. Joten voimme sanoa, että SLF4J ja Log4J ovat loogisesti kaksi eri asiaa.

Log4j vs SLF4J

Nyt sinun tarvitsee vain valita, mitä kirjauskehystä sinun tulee käyttää suorituksen aikana. Tätä varten sinun on sisällytettävä kaksi jar-tiedostoa:

myivecricket sisään
  • SLF4J-sidontapurkkitiedosto
  • Halutut lokikehyksen jar-tiedostot

Jos esimerkiksi haluat käyttää log4j:tä projektissasi, sinun on sisällytettävä alla olevat jar-tiedostot:

  • slf4j-log4j12-1.7.12.jar
  • log4j-1.2.17.jar

Kun olet sijoittanut molemmat jar-tiedostot sovelluksesi luokkapolulle, SLF4J tunnistaa sen automaattisesti ja alkaa käyttää log4j:tä lokilausekkeiden käsittelyyn log4j-määritystiedostossa antamiesi asetusten perusteella.

Esimerkiksi alla koodi, jonka voit kirjoittaa projektisi luokkatiedostoon:

 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info('Hello World'); } } 

Miksi SLF4J on parempi kuin Log4J?

On aina vaikea valita yksi SLF4J:n ja Log4j:n väliltä. Jos sinulla on valinnanvaraa, suosittelen sinua; logging abstraktio on aina parempi kuin kirjauskehys. Jos käytät lokiabstraktiota, erityisesti SLF4J:tä, voimme siirtyä mihin tahansa lokikehykseen, jota tarvitsemme käyttöönoton yhteydessä, valitsematta yksittäistä riippuvuutta.

muuntaa javassa merkkijonoksi

Seuraavat syyt ovat riittävän hyviä SLF4J:n valitsemiseen Log4j:n sijaan:

  • On aina parempi käyttää abstraktiota.
  • SLF4J on avoimen lähdekoodin kirjasto tai sisäinen kirjasto, joka tekee siitä riippumattoman tietystä kirjaustoteutuksesta, mikä tarkoittaa, että useiden kirjastojen useita lokimäärityksiä ei tarvitse hallita.
  • SLF4J tarjoaa paikkamerkkipohjaisen lokin, joka parantaa koodin luettavuutta poistamalla tarkistuksia, kuten isInforEnabled(), isDebugEnabled() jne.
  • Käyttämällä SLF4J:n kirjausmenetelmää siirrämme lokiviestien (merkkijono) rakentamiskustannuksia siihen asti, kunnes tarvitset sitä, mikä on sekä prosessoria että muistia tehokasta.
  • Koska SLF4J käyttää vähemmän väliaikaisia ​​merkkijonoja, se tarkoittaa vähemmän työtä roskienkerääjälle, mikä tarkoittaa parempaa suorituskykyä ja suorituskykyä sovelluksellesi.

Joten pohjimmiltaan SLF4J ei korvaa log4j:tä; molemmat työskentelevät yhdessä. Se poistaa riippuvuuden log4j:stä sovelluksestasi ja helpottaa sen korvaamista tulevaisuudessa tehokkaammalla kirjastolla.