Apache log4j | |
Fejlesztő | Apache Software Foundation |
Legfrissebb stabil kiadás | 2.24.1 (stabil verzió, 2024. szeptember 29.)[1] |
Programozási nyelv | Java |
Operációs rendszer | multi-platform |
Platform | Java virtuális gép |
Kategória | naplózó eszközök |
Licenc | Apache Licenc 2.0 |
Az Apache log4j weboldala |
Az Apache log4j Java-alapú naplózási segédeszköz. Eredetileg Ceki Gülcü írta, jelenleg az Apache Software Foundation projektje, egyike a számos Java naplózási keretrendszernek .
Gülcü azóta már az SLF4J-en és Logback projekten dolgozik,[2] amelyek a log4j új generációs változatai lesznek.
A log4j csapat szintén elkészítette a log4j utódját a 2.0-s verziószámmal. A log4j 2.0 tanult a log4j 1.2, 1.3 és java.util.logging és logback problémáiból, megnevezve azokat a kulcsproblémákat, amelyek ezekben a keretrendszerekben felmerültek. A log4j 2.0 továbbá egy bővítő modul architektúrát is nyújt, amely jobban bővíthetővé teszi elődjénél. A log4j 2.0 nem kompatibilis visszafelé az 1.x-es verziókkal,[3] habár egy illesztő program rendelkezésre áll hozzá.
A következő táblázat definiálja a log szinteket és üzeneteket a log4j-ban, fontossági szerint csökkenő sorrenden. A bal oldali oszlop megadja a log szintek megnevezést a log4j-ben, a jobb oldali oszlop pedig egy rövid leírást ad minden naplószintről.
Szint | Leírás |
---|---|
OFF | A legmagasabb lehetséges besorolás, melyet a naplózás kikapcsolására szántak. |
FATAL | Komoly hibák, amelyek idő előtti leállás okozhatnak. Várhatóan ezek azonnal láthatók a státusz konzolon. |
ERROR | Egyéb futás idejű hibák vagy nem várt feltételek teljesülése. Várhatóan ezek azonnal láthatók a státusz konzolon. |
WARN | Elavult API-k használata, az API-k rossz használata, 'majdnem' hibák, és egyéb futás idejű szituációk, melyek nem kívánatosak ill. nem vártak, de nem feltétlenül rosszak. Várhatóan ezek azonnal láthatók a státusz konzolon. |
INFO | Fontos futási események (elindulás/leállás). Várhatóan ezek azonnal láthatók a státusz konzolon, szóval óvatosan, és minimumra törekedve kell használni. |
DEBUG | Részletes információk a rendszer futása közben. Várhatóan ezek megfelelően ezek csak a naplófájlba írandók. |
TRACE | Legrészletesebb információk. Várhatóan ezek csak a naplófájlba írandók, a 1.2.12 verzió óta. |
A log4j-t háromféleképpen is lehet konfigurálni: properties fájllal, XML fájllal és Java kódon keresztül. Akármelyiket is választjuk háromféle fő komponenst lehet definiálni: naplózókat (loggers), illesztőket (appenders) és elrendezéseket (layouts). A naplózás fájlon keresztüli konfigurálásának előnye, hogy a naplózás hangolását az alkalmazás módosítása nélkül lehet elvégezni a log4j használatával. Az alkalmazás futhat naplózás nélkül a probléma felmerüléséig pl., és aztán a naplózást vissza lehet kapcsolni egyszerűen a konfigurációs fájl módosításával.
A naplózók (angolul Logger-ek) reprezentálják a logikai naplófájl nevek. Ezek azok a nevek, amelyek használatosak a Java alkalmazásban is. Minden naplózó függetlenül konfigurálható, megadható, hogy milyen szinten naplózzon (FATAL, ERROR stb.) az aktuális naplófájlban. A log4j korábbi verzióban volt még kategória (category) és prioritás (priority) is, de jelenleg ezeket naplózók (angolul logger) és szinteknek (angolul level) hívják.
A tényleges kimeneteket az illesztők (angolul Appender-ek) állítják elő. Számos illesztő érhető el beszélő nevekkel pl. FileAppender, DailyRollingFileAppender, ConsoleAppender, SocketAppender, SyslogAppender, NTEventLogAppender és SMTPAppender. Minden naplózóhoz több illesztő is hozzárendelhető, így lehetséges naplózni ugyanazt az információt több kimenetre is, pl. egyszerre egy lokális fájlba és egy socket listenerre egy másik számítógépen.
Az illesztők elrendezéseket (angolul Layoutokat) használnak, hogy formába öntsék a napló bejegyzéseket. Az egy-sor-egy-időben naplófáj formázás egy olyan népszerű minta elrendezés, amely olyan minta stringet használ, mint a C / C++ printf függvénye. Létezik továbbá HTMLLayout és XMLLayout elrendezés formázó is HTML ill. XML használatához a kényelem kedvéért.
A hibásan működő konfiguráció hibakereséshez a -Dlog4j.debug
Java VM tulajdonság beállítása használható, amely a sztenderd kimentre irányítja a kimenetet. Azért, hogy honnan lett a log4j.properties ill log4j.xml betöltve, a következő kódrészletek felelnek: getClass().getResource("/log4j.properties")
, getClass().getResource("/log4j.xml")
.
Van egy implicit nem „konfigurált” konfigurációja is a log4j-nak, amely log4j konfiguráció nélküli Java alkalmazások esetén aktivizálóik. Kiír egy figyelmeztetést sztenderd kimentre, arról hogy a program nincs bekonfigurálva, továbbá kiírja a log4j weboldalára mutató URL-t is, ahol a további részletei megtekinthetők, valamint kiír egy ismertetőt a log4j konfigurációjáról. Miután kiíródik az említett figyelmeztetés, a nem konfigurált log4j-s alkalmazás többé nem íja ki az INFO, DEBUG vagy TRACE ill. magasabb szintűeket üzeneteket.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>
<!--
az appender egy kimeneti típus, mint pl. a konzol vagy egy fájl;
az appenderek nevei tetszőlegesen választhatók
-->
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
</layout>
</appender>
<!--
loggers of category 'org.springframework' will only log messages of level "info" or higher;
if you retrieve Loggers by using the class name (e.g. Logger.getLogger(AClass.class))
and if AClass is part of the org.springframework package, it will belong to this category
-->
<logger name="org.springframework">
<level value="info"/>
</logger>
<!--
everything of spring was set to "info" but for class
PropertyEditorRegistrySupport we want "debug" logging
-->
<logger name="org.springframework.beans.PropertyEditorRegistrySupport">
<level value="debug"/>
</logger>
<logger name="org.acegisecurity">
<level value="info"/>
</logger>
<root>
<!--
all log messages of level "debug" or higher will be logged, unless defined otherwise
all log messages will be logged to the appender "stdout", unless defined otherwise
-->
<level value="debug" />
<appender-ref ref="stdout" />
</root>
</log4j:configuration>
A TTCC egy üzenet formátum, amit a log4j használ.[4] TTCC egy betűszó a Time Thread Category Component-re (magyarul idő/szál/kategória/komponens), amely a következő mintát használja:
%r [%t] %-5p %c %x - %m%n
Ahol:
Mnemonic | Leírás |
---|---|
%r | Az elrendezés keletkezése és naplózási esemény létrejötte közti milliszekundumban mért idő íratható ki vele. |
%t | A szál neve, amely a naplózási eseményt generálta íratható ki vele. |
%p | A naplózási esemény prioritása íratható ki vele. |
%c | A naplózási esemény kategóriája íratható ki vele. |
%x | Kiíratható vele az adott szál NDC-je (beágyazott diagnosztikai kontextus angolul nested diagnostic context), amely a naplózási eseményt generálta. |
%X{key} | Kiíratható vele az adott szál MDC-je (leképezett diagnosztikai kontextus angolul mapped diagnostic context), amely a naplózási eseményt generálta, a megadott key nevű kulcsra. |
%m | A naplózási esemény az alkalmazás által adott üzenete íratható ki vele. |
%n | A naplózási esemény platform-specifikus új sor karaktere v. karakterei írathatók ki vele. |
%L | A sorszám, ahol a hívás történik |
Példa a kimenetre
467 [main] INFO org. Apache.log4j.examples. Sort - Exiting main method.
Ez a szócikk részben vagy egészben a log4j című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.