System.out.println vs Naplók

1. Miért a naplózók?

A program írása vagy a vállalati termelési alkalmazás fejlesztése közben a System.out.println a legegyszerűbb és legkönnyebb megoldásnak tűnik. Nincsenek további könyvtárak, amelyeket hozzá lehetne adni az osztályútvonalhoz, és nem kell további konfigurációkat végrehajtani.

De használva System.out.println számos hátránnyal jár, amelyek sok helyzetben befolyásolják a használhatóságát. Ebben az oktatóanyagban megvitatjuk miért és mikor szeretnénk egy egyszerű naplót használni a régi mellett System.out és System.err. Néhány gyors példát is bemutatunk a Log4J2 naplózási keretrendszer használatával.

2. Beállítás

Mielőtt elkezdenénk, nézzük meg a szükséges Maven-függőségeket és konfigurációkat.

2.1. Maven-függőségek

Kezdjük azzal, hogy hozzáadjuk a Log4J2 függőséget a sajátunkhoz pom.xml:

 org.apache.logging.log4j log4j-api 2.12.1 org.apache.logging.log4j log4j-core 2.12.1 

Megtalálhatjuk a log4j-api és log4j-mag a Maven Central-on.

2.2. Log4J2 konfiguráció

A ... haszna System.out nem igényel további konfigurációt. A Log4J2 használatához azonban szükségünk van a log4j.xml konfigurációs fájl:

Szinte az összes naplózó keretrendszerhez valamilyen szintű konfigurációra van szükség, akár programszerűen, akár egy külső konfigurációs fájlon keresztül, például az itt bemutatott XML fájlon keresztül.

3. A napló kimenetének szétválasztása

3.1. System.out és System.err

Amikor alkalmazásunkat olyan szerverre telepítjük, mint a Tomcat, a szerver saját naplózót használ. Ha használjuk System.out, a rönkök végül catalina.out. Sokkal egyszerűbb az alkalmazásunk hibakeresése, ha a naplók külön fájlba kerülnek. A Log4j2 használatakor be kell illesztenünk egy fájl hozzáfűzőt a konfigurációba, hogy az alkalmazásnaplókat külön fájlba mentse.

Továbbá azzal System.out.println, nincs ellenőrzés és szűrés arról, hogy mely naplókat kell kinyomtatni. A naplók elválasztásának egyetlen lehetséges módja a használat System.out.println információnaplókhoz és System.err.println hibanaplókhoz:

System.out.println ("Ez egy tájékoztató üzenet"); System.err.println ("Ez egy hibaüzenet");

3.2. Log4J2 naplózási szintek

Hibakeresési vagy fejlesztői környezetben meg akarjuk tekinteni az alkalmazás által nyomtatott összes információt. De egy élő vállalati alkalmazásban a több napló a késés növekedését jelenti. Az olyan naplózó keretrendszerek, mint a Log4J2, több naplószintű vezérlést biztosítanak:

  • HALÁLOS
  • HIBA
  • FIGYELMEZTET
  • INFO
  • HIBÁK
  • NYOM
  • MINDEN

Ezen szintek használatával könnyen szűrhetjük, hogy mikor és hol milyen információkat nyomtassunk:

logger.trace ("Nyomkövetési naplóüzenet"); logger.debug ("Hibakeresési naplóüzenet"); logger.info ("Info napló üzenet"); logger.error ("Hiba napló üzenet"); logger.warn ("Figyelmeztetési naplóüzenet"); logger.fatal ("Végzetes naplóüzenet");

Az egyes forráskód-csomagok szintjét külön-külön is konfigurálhatjuk. A naplószintű konfigurációról a Java Naplózás cikkünkben olvashat bővebben.

4. Naplók írása fájlokba

4.1. Újratervezés System.out és System.err

Lehetséges útvonal System.out.println fájlba a System.setOut () módszer:

PrintStream outStream = new PrintStream (új fájl ("outFile.txt")); System.setOut (outStream); System.out.println ("Ez egy baeldung cikk");

És abban az esetben System.err:

PrintStream errStream = new PrintStream (új fájl ("errFile.txt")); System.setErr (errStream); System.err.println ("Ez egy baeldung cikkhiba");

Amikor a kimenetet egy fájlba irányítja a System.out vagy System.err, nem tudjuk ellenőrizni a fájl méretét, így a fájl az alkalmazás futtatásának ideje alatt folyamatosan növekszik.

A fájlméret növekedésével nehéz lehet ezeket a nagyobb naplókat megnyitni vagy elemezni.

4.2. Naplózás fájlokba a Log4J2 segítségével

A Log4J2 mechanizmust biztosít a naplók szisztematikus írásához fájlokba, és a fájlok gördítéséhez bizonyos házirendek alapján. Például megtehetjük állítsa be az áthúzandó fájlokat dátum / idő mintázat alapján:

Vagy tehetjük tekerje a fájlokat méret alapján, ha elérik az adott küszöböt:

...% d {éééé-hh-nn. ÓÓ: mm: ss}% p% m% n 

5. Naplózás külső rendszerekhez

Amint az előző szakaszban láthattuk, a naplózó keretrendszerek lehetővé teszik a naplók fájlba írását. Hasonlóképpen ők is biztosítják a naplót más rendszerekhez és alkalmazásokhoz. Ez lehetővé teszi a naplók küldését egy Kafka Streambe vagy egy Elasticsearch adatbázisba a Log4J függelékek használatával ahelyett, hogy használná System.out.println.

Kérjük, olvassa el a Log4j appender cikkünket, ha további részleteket szeretne tudni az ilyen függelékek használatáról.

6. A napló kimenet testreszabása

A Loggers használatával testre szabhatjuk, hogy milyen információkat kell kinyomtatni a tényleges üzenettel együtt. Az általunk kinyomtatható információk tartalmazzák a csomag nevét, a naplószintet, a sorszámot, az időbélyeget, a módszer nevét stb.

Bár ez lehetséges lenne System.out.println, sok kézi munkát igényelne, míg a naplózási keretek ezt a funkciót már a dobozon kívül biztosítják. Fakitermelőkkel, egyszerűen meghatározhatunk egy mintát a naplózó konfigurációjában:

Ha a Log4J2-t vesszük figyelembe naplózó keretrendszerünkben, akkor többféle minta közül választhatunk vagy testre szabhatunk. További információkért tekintse meg a hivatalos Log4J2 dokumentációt.

7. Következtetés

Ez a cikk különféle okokat fejt ki, miért használhatja a naplózó keretrendszert, és miért nem támaszkodhat csak System.out.println alkalmazásnaplóinkhoz. Bár indokolt a használata System.out.println kis tesztprogramok esetében nem szívesen használnánk a vállalati termelési alkalmazások naplózásának fő forrásaként.

Mint mindig, a cikkben szereplő kódpéldák elérhetők a GitHubon.