Log4j - Log4j - Wikipedia
![]() | |
Vývojáři | Softwarová nadace Apache |
---|---|
První vydání | 8. ledna 2001[1] |
Stabilní uvolnění | 2.14.0 / 6. listopadu 2020[2] |
Úložiště | Repozitář Log4j |
Napsáno | Jáva |
Operační systém | Cross-platform |
Typ | Protokolování |
Licence | Licence Apache 2.0 |
webová stránka | protokolování |
Apache Log4j je Jáva -na základě protokolování nástroj. To bylo původně napsáno Ceki Gülcü a je součástí Služby protokolování Apache projekt Softwarová nadace Apache. Log4j je jedním z několika Protokolovací rámce Java.
Gülcü od té doby zahájila SLF4J a přihlášení[3] projekty se záměrem nabídnout nástupce společnosti Log4j.
Tým Apache Log4j vytvořil nástupce Log4j 1 s verzí číslo 2.[4] Log4j 2 byl vyvinut se zaměřením na problémy Log4j 1.2, 1.3, java.util.logging a Logback a řeší problémy, které se v těchto rámcích objevily.[5] Log4j 2 navíc nabízí architekturu zásuvných modulů, díky níž je rozšiřitelnější než jeho předchůdce. Log4j 2 není zpětně kompatibilní s verzemi 1.x,[6] i když je k dispozici „adaptér“.
5. srpna 2015 oznámil Výbor pro správu projektů Apache Logging Services[7] že Log4j 1 dosáhl konce životnosti a že uživatelům Log4j 1 se doporučuje upgradovat na Apache Log4j 2.
Apache Log4j 2
Apache Log4j 2 je nástupcem Log4j 1, který byl vydán jako Verze GA v červenci 2014. Rámec byl přepsán od nuly a byl inspirován stávajícími řešeními protokolování, včetně Log4j 1 a java.util.logging. Hlavní rozdíly[8][9] z Log4j 1 jsou:
- Vylepšená spolehlivost. Zprávy se neztratí při rekonfiguraci rozhraní, jako v Log4j 1 nebo Logback
- Rozšiřitelnost: Log4j 2 podporuje systém zásuvných modulů, který umožňuje uživatelům definovat a konfigurovat vlastní komponenty
- Zjednodušená syntaxe konfigurace
- Podpora pro XML, JSON, yaml a konfigurace vlastností
- Vylepšené filtry
- Podpora vyhledávání vlastností pro hodnoty definované v konfiguračním souboru, vlastnosti systému, proměnné prostředí, mapa ThreadContext a data přítomná v události
- Podpora více API: Log4j 2 lze použít s aplikacemi používajícími API Log4j 2, Log4j 1.2, SLF4J, Commons Logging a java.util.logging (JUL).
- Vlastní úrovně protokolu
- Podpora lambda ve stylu Java 8 pro „líné protokolování“
- markery
- Podpora pro uživatelem definované objekty zpráv
- „Bez odpadu nebo málo odpadu“ v běžných konfiguracích
- Vylepšená rychlost
Jednou z nejuznávanějších funkcí Log4j 2 je výkon „asynchronních záznamníků“.[10] Log4j 2 využívá LMAX Disruptor.[11] Knihovna snižuje potřebu zamykání jádra a zvyšuje výkon protokolování o faktor 12. Například ve stejném prostředí může Log4j 2 psát více než 18 000 000 zpráv za sekundu, zatímco jiné rámce jako Logback a Log4j 1 pouze zapisují <2 000 000 zpráv za vteřinu.
Log4j úrovně protokolu
Následující tabulka definuje vestavěné úrovně protokolu a zprávy v Log4j v sestupném pořadí závažnosti. V levém sloupci je uvedeno označení úrovně protokolu v Log4j a pravý sloupec obsahuje stručný popis každé úrovně protokolu.
Úroveň | Popis |
---|---|
VYPNUTO | Nejvyšší možné hodnocení a je určeno k vypnutí protokolování. |
FATÁLNÍ | Závažné chyby, které způsobují předčasné ukončení. Očekávejte, že budou okamžitě viditelné na stavové konzole. |
CHYBA | Další runtime chyby nebo neočekávané podmínky. Očekávejte, že budou okamžitě viditelné na stavové konzole. |
VAROVAT | Používání zastaralých API, špatné používání API, „téměř“ chyby, další běhové situace, které jsou nežádoucí nebo neočekávané, ale ne nutně „špatné“. Očekávejte, že budou okamžitě viditelné na stavové konzole. |
INFO | Zajímavé runtime události (spuštění / vypnutí). Očekávejte, že budou okamžitě viditelné na konzole, proto buďte konzervativní a udržujte je na minimu. |
LADIT | Podrobné informace o průtoku systémem. Očekávejte, že se budou zapisovat pouze do protokolů. Obecně lze říci, že většina řádků zaznamenaných vaší aplikací by měla být napsána jako DEBUG. |
STOPA | Nejpodrobnější informace. Očekávejte, že se budou zapisovat pouze do protokolů. Od verze 1.2.12.[12] |
Vlastní úrovně protokolu
Log4j 2 umožňuje uživatelům definovat své vlastní úrovně protokolu.[13] Poskytuje se nástroj generátoru zdrojového kódu k vytvoření Loggerů, které podporují vlastní úrovně protokolu shodně s úrovněmi vestavěného protokolu. Vlastní úrovně protokolu mohou doplňovat nebo nahrazovat vestavěné úrovně protokolu.
Konfigurace Log4j
Log4j lze konfigurovat[14] prostřednictvím konfiguračního souboru nebo prostřednictvím kódu Java. Je možné zapsat konfigurační soubory XML, JSON, YAML nebo soubor vlastností formát. V rámci konfigurace můžete definovat tři hlavní komponenty: Loggery, Appenders a Layouts. Konfigurace protokolování pomocí souboru má tu výhodu, že protokolování lze zapnout nebo vypnout bez úpravy aplikace, která používá Log4j. Aplikaci lze povolit spuštění s odhlášením, dokud nenastane například problém, a poté lze protokolování znovu zapnout jednoduše úpravou konfiguračního souboru.
Dřevorubci[15] jsou pojmenovány destinace protokolu. Jedná se o názvy známé pro aplikaci Java. Každý záznamník je samostatně konfigurovatelný na to, na jakou úroveň protokolování (FATAL, ERROR atd.) Se aktuálně přihlašuje. V raných verzích Log4j se jim říkalo kategorie a priorita, ale teď se jim říká logér a úroveň. Logger může posílat zprávy protokolu více Appenders.
Skutečné výstupy provádí Dodatky.[16] K dispozici je řada doplňků s popisnými názvy, například FileAppender, RollingFileAppender, ConsoleAppender, SocketAppender, SyslogAppender a SMTPAppender. Log4j 2 přidal dodatky, které zapisují Apache žlab, Java Persistence API, Apache Kafka, NoSQL databáze, Soubory mapované do paměti Soubory s náhodným přístupem[17] a ZeroMQ koncové body. K libovolnému zařízení Logger lze připojit více příloh, takže je možné zaznamenávat stejné informace na více výstupů; například do souboru lokálně a do zásuvka posluchače na jiném počítači.
Dodatky používají Rozvržení[18] formátovat položky protokolu. Populární způsob formátování jednorázových souborů protokolu je PatternLayout, který používá řetězec vzoru, podobně jako C / C ++ funkce printf. K dispozici jsou také formátovače HTMLLayout a XMLLayout pro použití, když HTML nebo XML jsou vhodnější formáty. Log4j 2 přidal rozložení pro CSV, Graylog Extended Log Format (GELF),[19] JSON, YAML a RFC-5424.[20]
V Log4j 2, Filtry[21] lze definovat na konfiguračních prvcích a poskytnout tak jemnější kontrolu nad tím, které položky protokolu by měly být zpracovávány kterými protokoly a dodatky. Kromě filtrování podle úrovně protokolu a shody regulárních výrazů na řetězci zprávy přidal Log4j 2 filtry série, časové filtry, filtrování podle dalších atributů událostí protokolu, jako jsou značky nebo kontextová mapa vlákna a JSR 223 filtry skriptů.
Ladění špatně fungující konfigurace:
- V konfiguracích Log4j 2 nastavte
postavení
atribut TRACE k odeslání interního výstupu protokolování stavu standardně. Chcete-li povolit protokolování stavu před nalezením konfigurace, použijte vlastnost Java VM-Dorg.apache.logging.log4j.simplelog.StatusLogger.level = trasování
. - V Log4j 1 použijte vlastnost Java VM
-Dlog4j.debug
.
Chcete-li zjistit, kde byl nahrán konfigurační soubor log4j2.xml z inspect getClass (). getResource ("/ log4j2.xml")
.
K dispozici je také implicitní „nekonfigurovaná“ nebo „výchozí“ konfigurace Log4j, konfigurace Java aplikace vybavené Log4j, která postrádá jakoukoli konfiguraci Log4j. Toto vytiskne, aby se zobrazilo varování, že program není nakonfigurován, a adresa URL na web Log4j, kde lze najít podrobnosti o varování a konfiguraci. Kromě tisku tohoto varování bude nekonfigurovaná aplikace Log4j standardně tisknout pouze CHYBOVÉ nebo FATÁLNÍ položky protokolu.
Příklad pro Log4j 2
<?xml version="1.0" encoding="UTF-8"?> stav ="stopa" monitorInterval ="60"> <Properties> jméno ="název souboru">target / test.log</Property> </Properties> <Appenders> jméno =„STDOUT“> vzor ="% d% p% c {1.} [% t]% m% n"/> </Console> jméno ="soubor" název souboru =„$ {název souboru}“> <PatternLayout> <pattern>% d% p% c {1.} [% t]% m% n</pattern> </PatternLayout> </File> </Appenders> <Loggers> <!-- protokolovače, jejichž název začíná řetězcem „org.springframework“, budou protokolovat pouze zprávy úrovně „info“ nebo vyšší; pokud načtete Loggery pomocí názvu třídy (např.Logger.getLogger (AClass.class)) a pokud je AClass součástí balíčku org.springframework, bude patřit do této kategorie --> jméno =„org.springframework“ úroveň ="informace" aditivita ="Nepravdivé" /> <!-- Příklad filtru: pro protokolovače, jejichž název začíná řetězcem „com.mycompany.myproduct“, zaznamenávat položky úrovně „debug“ nebo vyšší, jejichž data ThreadContextMap obsahují pár klíč – hodnota „test = 123“, pošlete také tyto položky protokolu uživateli „STDOUT“. --> jméno =„com.mycompany.myproduct“ úroveň ="ladit" aditivita ="skutečný"> <ThreadContextMapFilter> klíč ="test" hodnota ="123"/> </ThreadContextMapFilter> ref =„STDOUT“/> </Logger> <!-- Ve výchozím nastavení budou protokolovány všechny zprávy protokolu úrovně „trasování“ nebo vyšší. Zprávy protokolu se odesílají „souboru“ přihlašovateli a zprávy protokolu s úrovní „chyba“ a vyšší budou odeslány uživateli „STDOUT“. --> úroveň ="stopa"> ref ="soubor"/> ref =„STDOUT“ úroveň ="chyba"/> </Root> </Loggers> </Configuration>
Příklad pro Log4j 1.2
<?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> <!-- appender je výstupní cíl, například konzole nebo soubor; jména příloh jsou volena libovolně. --> jméno ="stdout" třída =„org.apache.log4j.ConsoleAppender“> třída =„org.apache.log4j.PatternLayout“> jméno =„ConversionPattern“ hodnota ="% d {ABSOLUTE}% 5p% c {1}:% L -% m% n" /> </layout> </appender> <!-- protokolovači kategorie 'org.springframework' budou protokolovat pouze zprávy úrovně "info" nebo vyšší; pokud načtete Loggery pomocí názvu třídy (např.Logger.getLogger (AClass.class)) a pokud je AClass součástí balíčku org.springframework, bude patřit do této kategorie --> jméno =„org.springframework“> <úroveň hodnota ="informace"/> </logger> <!-- všechno na jaře bylo nastaveno na „info“, ale pro třídu PropertyEditorRegistrySupport chceme "ladit" protokolování --> jméno =„org.springframework.beans.PropertyEditorRegistrySupport“> <úroveň hodnota ="ladit"/> </logger> jméno =„org.acegisecurity“> <úroveň hodnota ="informace"/> </logger> <root> <!-- budou zaznamenány všechny zprávy protokolu úrovně „debug“ nebo vyšší, pokud není definováno jinak všechny zprávy protokolu budou zaznamenány do appdo "stdout", pokud není definováno jinak --> <úroveň hodnota ="ladit" /> ref ="stdout" /> </root></log4j:configuration>
TTCC
TTCC je formát zprávy používaný log4j.[22] TTCC je zkratka pro Součást kategorie časového vlákna. Používá následující vzorec:
% r [% t]% -5p% c% x -% m% n
Kde
Mnemotechnická pomůcka | Popis |
---|---|
% r | Slouží k výstupu počtu milisekund, které uplynuly od konstrukce rozložení až do vytvoření události protokolování. |
% t | Používá se k výstupu názvu vlákna, které generovalo událost protokolování. |
% str | Slouží k výstupu priority události protokolování. |
%C | Slouží k výstupu kategorie události protokolování. |
%X | Používá se k výstupu NDC (vnořený diagnostický kontext) přidruženého k vláknu, které generovalo událost protokolování.[23] |
% X {klíč} | Používá se k výstupu MDC (mapovaný diagnostický kontext) přidruženého k vláknu, které generovalo událost protokolování pro zadaný klíč.[24] |
% m | Používá se k odeslání zprávy dodané aplikací spojené s událostí protokolování. |
% n | Používá se k výstupu pro konkrétní platformu nový řádek znak nebo znaky. |
Příklad výstupu
467 [hlavní] INFO org.apache.log4j.examples.Sort - opouští hlavní metodu.
Přístavy
- log4c - Port pro C. Log4C je založen na C. protokolování knihovna, vydáno dne SourceForge pod LGPL licence. Pro různé Unix operační systémy autoconf a automake soubory jsou k dispozici. Na Okna A Makefile je poskytován pro použití s MSVC. Vývojáři se mohou také rozhodnout použít ke kompilaci zdroje svůj vlastní systém pro vytváření, v závislosti na svých technických požadavcích na sestavení. Instance log4c Knihovna může být konfigurována třemi způsoby: pomocí proměnné prostředí, programově nebo prostřednictvím XML konfigurační soubor. log4c má přílohy pro soubory, streamy a soubory mapované do paměti. (No Socket Adapter.) Poslední verze je 1.2.4, vydaná v roce 2013 a projekt již není aktivně vyvíjen.[25]
- log4js - Port pro JavaScript. Log4js je k dispozici na základě licence Softwarová nadace Apache. Jednou ze zvláštních funkcí Log4js je schopnost vzdáleně protokolovat události prohlížeče na serveru. Použitím Ajax je možné zasílat protokolovací události v několika formátech (XML, JSON, prostý ASCII atd.) na server, který se tam vyhodnotí. Následující přílohy jsou implementovány pro log4js: AjaxAppender, ConsoleAppender, FileAppender, JSConsoleAppender, MetatagAppender a WindowsEventsAppender. K dispozici jsou následující třídy rozložení: BasicLayout, HtmlLayout, JSONLayout a XMLLayout. Poslední verze je 1.1, vydaná v roce 2008.[26]
- log4javascript - Další port pro JavaScript. log4javascript je rámec pro protokolování JavaScript založený na log4j. Nejnovější verze je 1.4.9, která byla vydána v květnu 2014.[27]
- JSNLog - Port pro JavaScript. Automaticky umisťuje zprávy z protokolovačů JavaScriptu do protokolů na straně serveru pomocí komponenty .NET na straně serveru, která je v rozhraní s Log4Net, NLog, Elmah nebo Common.Logging. To poskytuje integrovaný protokol pro události na straně klienta a serveru. ID požadavku korelují události související s konkrétním uživatelem. Konfigurace se provádí prostřednictvím souboru web.config na straně serveru. Podporuje protokolování výjimek včetně trasování zásobníku. V červenci 2014 byla nejnovější verze 2.7.1 a aktualizace byly prováděny pravidelně.[28]
- Apache Log4net - Port pro Microsoft .NET Framework. Počáteční práce byla provedena Neoworks a byl darován Softwarová nadace Apache v únoru 2004. Rámec je podobný původnímu log4j, přičemž využívá výhod nových funkcí v prostředí .NET runtime. Poskytuje vnořený diagnostický kontext (NDC) a mapovaný diagnostický kontext (MDC). Nejnovější verze je 2.0.8, která byla vydána v roce 2017.[29][30]
- log4perl - A Perl port široce populárního logovacího balíčku log4j. Poslední verze je 1.49, vydána v únoru 2017.[31]
- Apache log4php - "Všestranný rámec protokolování pro Windows PHP. Původně port Apache log4j pro PHP se rozrostl o různé funkce specifické pro PHP. “[32]
- PL-SQL-Logging-Utility je adaptací log4j v PL / SQL.[33]
- Log4db2 je protokolovací nástroj pro produkt DB2 for LUW, který používá pokyny SQL s kódem SQL PL.[34]
- Apache Log4cxx - Rámec protokolování pro C ++ vzorovaný po Apache log4j, který používá Přenosný běh Apache pro většinu kódů specifických pro platformu a měly by být použitelné na jakékoli platformě podporované APR. V současné době prochází inkubací. Nejnovější verze je 0.10.0, vydaná v roce 2008.[35]
- Log4r - Komplexní a flexibilní knihovna protokolování napsaná v Ruby pro použití v programech Ruby. Byl inspirován a poskytuje mnoho funkcí projektu Apache Log4j.[36]
Viz také
Reference
- ^ "Historie vydání Apache Log4j 1.2". apache.org. Softwarová nadace Apache. Citováno 2014-09-02.
- ^ "Log4j - Změny - Apache Log4j 2". apache.org. Softwarová nadace Apache. Citováno 21. dubna 2017.
- ^ "Přihlásit se domů". Logback.qos.ch. Citováno 2014-07-24.
- ^ „Průvodce Log4j 2 - Apache Log4j 2“. Logging.apache.org. 12.7.2014. Citováno 2014-07-24.
- ^ "Domů | Ralph Goers | Protokolování pomocí Log4j 2". Ralph Goers.
- ^ „Průvodce Log4j 2 - Apache Log4j 2: Novinky“. Logging.apache.org. 12.7.2014. Citováno 2014-07-24.
- ^ „Projekt Apache ™ Logging Services ™ oznamuje konec životnosti Log4j ™ 1; doporučuje upgrade na Log4j 2“. blogs.apache.org. 2015-08-05. Citováno 2016-07-03.
- ^ „Nový log4j 2.0“. Grobmeier.de. 2012-12-05. Citováno 2014-07-24.
- ^ "Log4j - Přehled - Apache Log4j 2". logging.apache.org. 2016-06-05. Citováno 2016-07-03.
- ^ „Asynchronní záznamníky Log4j 2 pro protokolování s nízkou latencí - Apache Log4j 2“. Logging.apache.org. 12.7.2014. Citováno 2014-07-24.
- ^ „Disruptor by LMAX-Exchange“. Lmax-exchange.github.io. Citováno 2014-07-24.
- ^ „Úroveň (API Apache Log4j 1.2.17)“. Logging.apache.org. 09.06.2012. Citováno 2014-07-24.
- ^ „Vlastní úrovně protokolu“. Logging.apache.org. 12.7.2014. Citováno 2016-07-16.
- ^ "Konfigurace". Logging.apache.org. 2016-07-05. Citováno 2016-07-16.
- ^ "Architektura". Logging.apache.org. 2016-07-05. Citováno 2016-07-16.
- ^ „Dodatky“. Logging.apache.org. 2016-07-05. Citováno 2016-07-16.
- ^ „RandomAccessFile“. docs.oracle.com. 28. 7. 2011. Citováno 2016-07-16.
- ^ "Rozvržení". Logging.apache.org. 2016-07-05. Citováno 2016-07-16.
- ^ „GELF“. docs.graylog.org. 08.06.2016. Citováno 2016-07-16.
- ^ „RFC 5424 - Syslog Protocol“. tools.ietf.org. 2009-03-01. Citováno 2016-07-16.
- ^ "Filtry". Logging.apache.org. 2016-07-05. Citováno 2016-07-16.
- ^ „TTCCLayout (Apache Log4j 1.2.17 API)“. Logging.apache.org. 09.06.2012. Citováno 2014-07-24.
- ^ „Class NDC“. Archivovány od originál dne 2007-08-20. Citováno 2014-07-24.
- ^ „MDC (Apache Log4j 1.2.17 API)“. Logging.apache.org. 09.06.2012. Citováno 2014-07-24.
- ^ "Logovací rámec pro C | Stažení softwaru pro správu systému zdarma na". Sourceforge.net. Citováno 2014-07-24.
- ^ „Log4js“. Log4js. Citováno 2017-03-29.
- ^ "rámec pro protokolování JavaScriptu". log4javascript. Citováno 2014-07-24.
- ^ „Protokolování chyb JavaScriptu do protokolu na straně serveru“. JSNLog. Citováno 2014-07-24.
- ^ "Apache log4net: Domů". Logging.apache.org. 2015-12-05. Citováno 2016-04-08.
- ^ „Verze 2.0.8 byla přijata · apache / logging-log4net @ cd20f62“. GitHub.
- ^ "log4perl - log4j pro Perl". Mschilli.github.com. Citováno 2014-07-24.
- ^ „Služby protokolování Apache“. Apache.org. Citováno 2015-03-11.
- ^ „tmuth / Logger-A-PL-SQL-Logging-Utility - GitHub“. Github.com. Citováno 2014-07-24.
- ^ „Log4db2 od angoca“. Angoca.github.io. Citováno 2014-07-24.
- ^ "log4cxx - změny". logging.apache.org.
- ^ "Manuál Log4r". log4r.rubyforge.org. Archivovány od originál dne 2012-12-25. Citováno 2017-04-13.
Další čtení
- Gülcü, Ceki (únor 2010), Kompletní příručka Log4j (2. vyd.), QOS.ch, str. 204, ISBN 978-2-9700369-0-6
- Gupta, Samudra (22. června 2005), Pro Apache Log4j (2. vyd.), Apress, str. 224, ISBN 978-1-59059-499-5