Apache Log4j

A Wikipédiából, a szabad enciklopédiából
Apache log4j
Fejlesztő Apache Software Foundation
Legfrissebb stabil kiadás 1.2.17 (2012. május 6.) +/-
Legfrissebb fejlesztői kiadás ismeretlen +/-
Programozási nyelv Java
Operációs rendszer multi-platform
Kategória naplózó eszközök
Licenc Apache Licenc 2.0
Az Apache log4j weboldala

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

Gülcü azóta már az SLF4J-en és Logback projekten dolgozik[1], 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, amely jelenleg béta állapotban van. A log4j 2.0 a 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 [2], habár egy illesztő program rendelkezésre áll hozzá.

Naplózás szintjei[szerkesztés | forrásszöveg szerkesztése]

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 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örtekedve 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 | forrásszöveg szerkesztése]

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, illesztőket és elrendezéseket. 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, ConsoleAppender, SocketAppender, SyslogAppender, NTEventLogAppender és még 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 | forrásszöveg szerkesztése]

<?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>

TTCC[szerkesztés | forrásszöveg szerkesztése]

A TTCC egy üzenet formátum, amit a log4j használ[3]. 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.

Példa a kimenetre
467 [main] INFO org. Apache.log4j.examples. Sort - Exiting main method.

Portolások[szerkesztés | forrásszöveg szerkesztése]

  • log4c - egy C nyelvű portolás. A Log4C egy 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. [4]
  • log4js - egy JavaScript megvalósítás. A Log4js Apache Software Foundation licenc alatt érhető el. A Log4js-nek egy 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.[5]
  • log4javascript - egy másik JavaScript megvalósítás. A log4javascript egy log4j-n alapuló JavaScript naplózó keretrendszer. A legutolsó verziója 2011 októberében kiadott 1.4.2 volt.[6]
  • Apache Log4net - egy 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 .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ó volt.[7]
  • log4perl - Egy Perl nyelvű megvalósítása a népszerű log4j naplózási csomagnak.[8]
  • log4r - Egy Ruby 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.[9]

Kapcsolódó szócikkek[szerkesztés | forrásszöveg szerkesztése]

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

További információk[szerkesztés | forrásszöveg szerkesztése]

Gülcü, Ceki (February, 2010), The Complete Log4j Manual (2nd ed.), QOS.ch, pp. 204, ISBN 978-2-9700369-0-6

Gupta, Samudra (June 22, 2005), Pro Apache Log4j (2nd ed.), Apress, pp. 224, ISBN 978-1-59059-499-5

Fordítás[szerkesztés | forrásszöveg szerkesztése]

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.