Apache Log4j

Apache log4j

FejlesztőApache Software Foundation
Legfrissebb stabil kiadás2.24.1 (stabil verzió, 2024. szeptember 29.)[1]
Programozási nyelvJava
Operációs rendszermulti-platform
PlatformJava virtuális gép
Kategórianaplózó eszközök
LicencApache Licenc 2.0
Az Apache log4j weboldala

Az Apache log4j Java-alapú naplózási segédeszköz. Eredetileg Ceki Gülcü(wd) írta, jelenleg az Apache Software Foundation projektje, egyike a számos Java naplózási keretrendszernek(wd).

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á.

Naplózás szintjei

[szerkesztés]

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 1.2 konfigurációja

[szerkesztés]

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.

log4j 1.2-es példa

[szerkesztés]
<?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.

Portolások

[szerkesztés]
  • log4c – C nyelvű portolás. A Log4C C-alapú naplózási könyvtár, amelyet a SourceForge-on adtak ki LGPL licenccel. Számos Unix operációs rendszerhez tartalmaz autoconf és automake fájlokat. Windows alatt az MSVC használatához szintén tartalmaz egy Makefile-t. A fejlesztők választhatóan használják saját make rendszerüket a forráskód lefordításához, az összeállítási (angolul build) követelményeknek megfelelően. A log4c könyvtár egy példánya konfigurálható háromféleképpen is: környezeti változókkal, programozottan illetve XML konfigurációs fájlon keresztül. Az 1.2.1-es legutolsó változatot 2007-ben adták ki, azóta a projekt aktív fejlesztése leállt.[5]
  • log4jsJavaScript-megvalósítás. A Log4js Apache Software Foundation licenc alatt érhető el. A Log4js különleges funkciója, hogy képes naplózni a böngésző eseményeit távoli szerveren. Ajax használata lehetővé teszi, hogy elküldje a naplózási eseményeket több különféle formátumban (XML, JSON, sima ASCII stb.) egy szervernek annak érdekében, hogy a kiértékelés ott történjen meg. A következő illesztőket valósították meg a log4js keretein belül: AjaxAppender, ConsoleAppender, FileAppender, JSConsoleAppender, MetatagAppender, és WindowsEventsAppender; továbbá a következő elrendezés osztályok léteznek: BasicLayout, HtmlLayout, JSONLayout, és XMLLayout. A legutolsó kiadás 2008-ban kiadott 1.1 volt.[6]
  • log4javascript – egy másik JavaScript-megvalósítás. A log4javascript egy log4j-n alapuló JavaScript naplózó keretrendszer. A legutolsó verziója a 2011 októberében kiadott 1.4.2.[7]
  • Apache Log4net – Microsoft .NET Framework-megvalósítás. Eredetileg a Neoworks dolgozta ki, majd a kódbázist 2004 februárjában az Apache Software Foundation-nak adományozta. A keretrendszer hasonló az eredeti log4j-hez, bár kihasználja a .Net futtatókörnyezet új lehetőségeit is. Beágyazott diagnosztikai kontextust (angolul NDC) és leképezett diagnosztikai kontextust (angolul MDC) is nyújt. Legutolsó kiadása a 2011-ben kiadott 1.2.11-es verzió.[8]
  • log4perl Archiválva 2013. január 23-i dátummal a Wayback Machine-ben – Perl nyelvű megvalósítása a népszerű log4j naplózási csomagnak.[9]
  • log4rRuby nyelvű megvalósítás. A Log4r-t az Apache Log4j projekt inspirálta, és számos funkcióját meg is valósították a projekt keretein belül, de nem direkt megvalósítása vagy klónja annak. A nagyfokú a hasonlóság mellett, a projektek nem kapcsolódnak egymáshoz semmilyen módon, a kódbázisuk teljesen különböző. A Log4r-t anélkül fejlesztették, hogy az Apache Log4j kódjába egyáltalán belenéztek volna.[10]

Kapcsolódó szócikkek

[szerkesztés]
  • Chainsaw
  • Log4Shell sebezhetőség, amelyet az Apache újabb kiadásokkal javított (2022)

Jegyzetek

[szerkesztés]
  1. Release 2.24.1, 2024. szeptember 29. (Hozzáférés: 2024. október 22.)
  2. Logback weboldala
  3. http://logging.apache.org/log4j/2.x/index.html See "News" section
  4. TTCC documentation. [2007. augusztus 28-i dátummal az eredetiből archiválva]. (Hozzáférés: 2013. április 8.)
  5. SourceForge Log4C homepage
  6. Log4js homepage. [2013. szeptember 7-i dátummal az eredetiből archiválva]. (Hozzáférés: 2013. szeptember 7.)
  7. Log4javascript official page
  8. Log4net project home page. [2007. március 1-i dátummal az eredetiből archiválva]. (Hozzáférés: 2013. április 8.)
  9. Github Log4perl weboldala. [2013. január 23-i dátummal az eredetiből archiválva]. (Hozzáférés: 2013. április 8.)
  10. Rubyforge Log4jr weboldala. [2012. december 25-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. december 25.)

További információk

[szerkesztés]

Fordítás

[szerkesztés]

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.