Кіріспе
Java-ға негізделген журналды жазу бағдарламалық құралы, Java журналды жазу фреймворкі. Apache Log4j – бастапқыда Ceki Gülcü жазған Java-ға негізделген журналды жазу утилитасы. Бұл Apache Software Foundation жобасы, Apache Logging Services құрамына кіреді. Log4j – бірнеше Java журналдау фреймворктерінің бірі. Gülcü кейін Log4j-ге балама болып табылатын SLF4J, Reload4j және Logback-ті жасады. Apache Log4j тобы Log4j 1.2, 1.3, java.util.logging және Logback-тің проблемаларына жауап ретінде Log4j 2-ні әзірледі. Бұл ретте, осы фреймворктердегі мәселелерді шешу үшін Log4j 2 плагин архитектурасын ұсынды, бұл оны алдыңғы нұсқасына қарағанда кеңейтуге мүмкіндік береді. Log4j 2, 1.x нұсқаларымен кері үйлесімді емес, бірақ «адаптер» қолжетімді. 2015 жылдың 5 тамызында Apache Logging Services жобасының басқару комитеті Log4j 1-дің өмірлік циклі аяқталғанын және Log4j 1 пайдаланушыларына Apache Log4j 2-ге жаңарту ұсынылғанын жариялады. 2022 жылдың 12 қаңтарында Ceki Gülcü, 2013 жылдан бері жинақталған Log4j 1.2.17-дегі ең маңызды мәселелерді шешу мақсатымен Log4j 1.2 нұсқасын Reload4j 1.2.18.0 ретінде қайта шығарды. 2021 жылдың 9 желтоқсанында Alibaba Cloud Security тобы Log4j 2-де кез келген кодты орындауға мүмкіндік беретін нөлдік күндік осалдықты жариялады және оған «Log4Shell» деген атау берді. Log4j 1-ден айырмашылықтары: жақсартылған сенімділік. Фреймворк қайта конфигурацияланғанда хабарламалар жоғалмайды, мысалы Log4j 1 немесе Logback-те. Кеңейтімділік: Log4j 2 пайдаланушыларға жеке компоненттерді анықтауға және конфигурациялауға мүмкіндік беретін плагин жүйесін қолдайды. Жеңілдетілген конфигурациялық синтаксис. xml, json, yaml және қасиеттер конфигурацияларын қолдау. Жақсартылған сүзгілер. Конфигурациялық файлда, жүйелік қасиеттерде, орта айнымалыларында, ThreadContext Map-та және оқиғадағы деректерде анықталған мәндер үшін қасиеттерді іздеуді қолдау. Көптеген API-лерді қолдау: Log4j 2, Log4j 2, Log4j 1.2, SLF4J, Commons Logging және java.util.logging (JUL) API-лерін пайдаланатын қосымшалармен қолданылуы мүмкін. Арнайы журнал деңгейлері. «Желсіз журналға жазу» үшін Java 8 стиліндегі lambda қолдауы. Маркерлер. Пайдаланушы анықтаған хабарлама объектілерін қолдау. Жалпы конфигурацияларда «қоқыссыз немесе аз қоқыс». Жылдамдықты жақсарту. Linux үшін жақсартылған қолдау. Log4j 2-нің ең танымал мүмкіндіктерінің бірі – «Асинхронды журналға алушылар» өнімділігі. Log4j 2 LMAX Disruptor-ды пайдаланады. Бұл кітапхана ядроны бұғаттау қажеттілігін азайтады және журналды жазу өнімділігін 12 есеге арттырады. Мысалы, бірдей ортада Log4j 2 секундына 18 000 000-нан астам хабар жаза алады, ал Logback және Log4j 1 сияқты басқа фреймворктер секундына 2 000 000-нан кем хабар жазады.
the Java logging framework
Apache Log4j is a Java based logging utility originally written by Ceki Gülcü. It is part of the Apache Logging Services, a project of the Apache Software Foundation. Log4j is one of several Java logging frameworks. Gülcü has since created SLF4J, Reload4j, and Logback which are alternatives to Log4j. The Apache Log4j team developed Log4j 2 in response to the problems of Log4j 1.2, 1.3, java. util. logging and Logback, addressing issues which appeared in those frameworks. In addition, Log4j 2 offered a plugin architecture which makes it more extensible than its predecessor. Log4j 2 is not backwards compatible with 1. x versions, although an "adapter" is available. On August 5, 2015, the Apache Logging Services Project Management Committee announced that Log4j 1 had reached end of life and that users of Log4j 1 were advised to upgrade to Apache Log4j 2. On January 12, 2022, a forked and renamed log4j version 1.2 was released by Ceki Gülcü as Reload4j version 1.2.18.0 with the aim of fixing the most urgent issues in log4j 1.2.17 that had accumulated since its release in 2013. On December 9, 2021, a zero day vulnerability involving arbitrary code execution in Log4j 2 was published by the Alibaba Cloud Security Team and given the descriptor "Log4Shell". from Log4j 1 are:
Improved reliability. Messages are not lost while reconfiguring the framework like in Log4j 1 or Logback
Extensibility: Log4j 2 supports a plugin system to let users define and configure custom components
Simplified configuration syntax
Support for xml, json, yaml and properties configurations
Improved filters
Property lookup support for values defined in the configuration file, system properties, environment variables, the ThreadContext Map, and data present in the event
Support for multiple APIs: Log4j 2 can be used with applications using the Log4j 2, Log4j 1.2, SLF4J, Commons Logging and java. util. logging (JUL) APIs. Custom log levels
Java 8 style lambda support for "lazy logging"
Markers
Support for user defined Message objects
"Garbage free or low garbage" in common configurations
Improved speed
Improved support for Linux
One of the most recognized features of Log4j 2 is the performance of the "Asynchronous Loggers". Log4j 2 makes use of the LMAX Disruptor. The library reduces the need for kernel locking and increases the logging performance by a factor of 12. For example, in the same environment Log4j 2 can write more than 18,000,000 messages per second, whereas other frameworks like Logback and Log4j 1 just write < 2,000,000 messages per second.
Log4j лог деңгейлері
Келесі кесте Log4j-дегі енгізілген журнал деңгейлері мен хабарламаларды ауырлық деңгейінің төмендеу ретімен анықтайды. Сол бағанда Log4j-дегі журнал деңгейінің атауы, ал оң бағанда әрбір журнал деңгейінің қысқаша сипаттамасы келтірілген. Деңгей сипаттамасы OFF Ең жоғары мүмкін деңгей және журналды тоқтатуға арналған. FATAL Жүйені ерте тоқтаруға әкелетін ауыр қателер. Бұл қателер күй көрсету консолінде дереу көрінуі керек. ERROR Орындалу кезіндегі басқа қателер немесе күтпеген жағдайлар. Бұл қателер күй көрсету консолінде дереу көрінуі керек. WARN Ескірген API-лерді пайдалану, API-лерді тиімсіз пайдалану, «қатеге жақын» жағдайлар, жағымсыз немесе күтпеген, бірақ міндетті түрде «қате» емес орындалу уақытындағы басқа жағдайлар. Бұл қателер күй көрсету консолінде дереу көрінуі керек. INFO Жұмыс істеу кезіндегі қызықты оқиғалар (қосылу/өшіру). Бұл ақпаратты консольде дереу көруге болады, сондықтан сақтықпен қарап, көлемді азайту керек. DEBUG Жүйедегі ағын туралы егжей-тегжейлі ақпарат. Бұл ақпарат тек журналға жазылуы керек. Әдетте, қолданбаңыз тіркеген көптеген жолдар DEBUG деңгейінде жазылуы тиіс. TRACE Ең егжей-тегжейлі ақпарат. Бұл ақпарат тек журналға жазылуы керек. 1.2.12 нұсқасынан бастап қолданылады.
Өзіндік журналды деңгейлері
Log4j 2 пайдаланушыларға өздерінің лог деңгейлерін анықтауға мүмкіндік береді. Бастапқы кодты генерациялайтын құрал, кіріктірілген лог деңгейлерімен бірдей түрде қолдау көрсететін логгерлерді жасау үшін ұсынылады. Әдетке қосылған лог деңгейлері кіріктірілген лог деңгейлерін толықтыра немесе алмастыра алады.
Порттар
log4c – C үшін порт. Log4C - C-ге негізделген журналдау кітапханасы, SourceForge-де LGPL лицензиясы бойынша жарияланған. Әртүрлі Unix операциялық жүйелері үшін autoconf және automake файлдары ұсынылады. Windows-та MSVC-мен пайдалану үшін Makefile ұсынылады. Дамытушылар өздерінің құрылымдық инженерлік талаптарына байланысты бастапқы кодты жинастыру үшін өздерінің жасау жүйесін де таңдауы мүмкін. log4c кітапханасының бір данасын үш әдіс арқылы конфигурациялауға болады: орта айнымалыларын пайдалану, бағдарламалық түрде немесе XML конфигурациялық файл арқылы. log4c файлдарға, ағындарға және жадқа бейімделген файлдарға қосымшаларды ұсынады. (Сокет адаптері жоқ.) Соңғы нұсқасы 1.2.4, 2013 жылы жарияланған, және жоба енді белсенді дамытылмайды. log4js – JavaScript үшін порт. Log4js Apache Software Foundation лицензиясы бойынша қолжетімді. Log4js-тің ерекше ерекшелігі – браузер оқиғаларын серверде қашықтан журналдау мүмкіндігі. Ajax көмегімен журналдау оқиғаларын бірнеше форматта (XML, JSON, қарапайым ASCII және т.б.) серверге жіберуге болады, онда олар бағаланады. Log4js үшін келесі қосымшалар іске асырылған: AjaxAppender, ConsoleAppender, FileAppender, JSConsoleAppender, MetatagAppender және WindowsEventsAppender. Келесі Layout сыныптары ұсынылады: BasicLayout, HtmlLayout, JSONLayout және XMLLayout. 2021 жылғы соңғы нұсқасы 2018 жылдың 18 қазанындағы 2.0 нұсқасы болды. log4javascript – JavaScript үшін тағы бір порт. log4javascript – log4j-ге негізделген JavaScript журналдау фреймворкі. 2021 жылғы соңғы нұсқасы 1.4.13, 2015 жылдың 23 мамырында жарияланған. JSNLog – JavaScript үшін порт. Автоматты түрде JavaScript журналдаушыларынан алынған хабарламаларды Log4Net, NLog, Elmah немесе Common.Logging интерфейсі бар NET серверлік компонентін пайдаланып серверлік журналдарға орналастырады. Бұл клиенттік және серверлік оқиғалар үшін біріктірілген журналды қамтамасыз етуге арналған. Сұрау идентификаторлары нақты пайдаланушыға қатысты оқиғаларды байланыстырады. Конфигурация серверлік веб-конфигурациялық файл арқылы жүзеге асырылады. Қателерді журналдауды, соның ішінде стек іздерін қолдайды. 2021 жылғы соңғы нұсқасы 3.0.0 болды және жаңартулар үнемі жасалды. Apache Log4net – Microsoft .NET Framework үшін порт. Бастапқы жұмысты Neoworks жасады және 2004 жылдың ақпан айында Apache Software Foundation-ға сыйға тартты. Фреймворк бастапқы log4j-ге ұқсас, бірақ .NET ортасының жаңа мүмкіндіктерін пайдаланады. Nested Diagnostic Context (NDC) және Mapped Diagnostic Context (MDC) ұсынады. 2022 жылғы соңғы нұсқасы 2.0.15 болды. log4perl – log4j-дің Perl порты. 2017 жылдың ақпан айындағы 1.49 нұсқасы 2021 жылдың соңына қарай қолданыста болды. Apache log4php – "PHP үшін әмбебап журналдау фреймворкі. Бастапқыда Apache log4j-ді PHP-ге порттау болды, ол әртүрлі PHP-ге тән мүмкіндіктерді қамтиды." PL SQL Logging Utility – log4j-дің PL/SQL-дегі бейімделуі. Log4db2 – SQL PL кодымен SQL нұсқауларын пайдаланатын LUW үшін DB2 журналдау құралы. Apache Log4cxx – Apache log4j үлгісі бойынша C++ үшін журналдау фреймворкі, ол платформаға тән кодтың көп бөлігі үшін Apache Portable Runtime пайдаланады және APR қолдайтын кез келген платформада қолдануға болады. Соңғы нұсқасы 0.13.0, 2022 жылы жарияланған. Log4r – Ruby бағдарламаларында пайдалану үшін Ruby тілінде жазылған толық және икемді журналдау кітапханасы. Ол Apache Log4j жобасының көптеген мүмкіндіктерін ұсынады.
log4javascript – Another port for JavaScript. log4javascript is a JavaScript logging framework based on the log4j. The latest version as of 2021 was 1.4.13, released on 23 May 2015. JSNLog – A port for JavaScript. Automatically places messages from JavaScript loggers in server side logs using a NET server side component that interfaces with Log4Net, NLog, Elmah or Common. Logging. This to provide an integrated log for client and server side events. Request ids correlate events related to a specific user. Configuration is via a server side web. config file. Supports exception logging including stack traces. as of 2021 the latest version was 3.0.0 and updates were made regularly. Apache Log4net – A port to the Microsoft NET Framework. The initial work was done by Neoworks and was donated to the Apache Software Foundation in February 2004. The framework is similar to the original log4j while taking advantage of new features in the NET runtime. Provides Nested Diagnostic Context (NDC) and Mapped Diagnostic Context (MDC). The latest version as of 2022 was 2.0.15.
log4perl – A Perl port of log4j. Version 1.49 of February 2017 was current as of 2021. Apache log4php – "A versatile logging framework for PHP. Originally a port of Apache log4j to PHP, it has grown to include various PHP specific features." PL SQL Logging Utility is an adaptation of log4j in PL/SQL. Log4db2 is a logging utility for DB2 for LUW that uses SQL instructions with SQL PL code. Apache Log4cxx – A logging framework for C++ patterned after Apache log4j, which uses Apache Portable Runtime for most platform specific code and should be usable on any platform supported by APR. The latest version is 0.13.0, released in 2022. Log4r – A comprehensive and flexible logging library written in Ruby for use in Ruby programs. It was inspired by and provides much of the features of the Apache Log4j project.
Log4Shell-тің осал тұсы
Log4j 2-де кодты қашықтан орындауға мүмкіндік беретін нөлдік күндегі осалдық, "Log4Shell" (CVE 2021 44228) деп белгіленді, 2021 жылдың 24 қарашасында Alibaba компаниясымен Apache-ге хабарланды және 2021 жылдың 9 желтоқсанында твитте жарияланды. Зардап шеккен қызметтерге Cloudflare, iCloud, Minecraft: Java Edition, Steam, Tencent QQ және Twitter кіреді. Apache Software Foundation Log4Shell-ге CVSS бойынша ең жоғары – 10 деңгейін берді, себебі миллиондаған серверлер бұл эксплойтқа ұшырауы мүмкін. Lunasec-тің "Free Wortley" бағадарламасы оны "апаттық пропорциядағы жобалық қателік" деп сипаттады. АҚШ-та Киберқауіпсіздік және инфрақұрылымдық қауіпсіздік агенттігінің (CISA) директоры Джен Истерли эксплойтты "өте қауіпті" деп атап, сатушыларға бағдарламалық жасақтаманы жаңартуға басымдық беруді кеңес берді, ал Германияның Ақпараттық қауіпсіздік жөніндегі федералды кеңсесі (BSI) эксплойтты ең жоғары қауіп деңгейіндегі "өте қауіпті жағдай" деп белгіледі (аударма). Канадалық киберқауіпсіздік орталығы (CCCS) ұйымдарды дереу шаралар қабылдауға шақырды. Осалдықты тудыратын мүмкіндік конфигурациялық параметрлер арқылы өшірілуі мүмкін, ол Log4j 2.15.0 rc1 нұсқасында (2021 жылдың 6 желтоқсанында ресми түрде шығарылды, осалдық жарияланғаннан үш күн бұрын) алынып тасталды және қашықтан іздеуді шектейтін әртүрлі параметрлермен ауыстырылды, осылайша осалдық азайтылды. Қосымша қауіпсіздік үшін, осы осалдықтың негізінде жатқан JNDI-ді пайдаланатын барлық мүмкіндіктер әдепкі бойынша өшіріледі, ал 2.16.0 нұсқасынан бастап хабарламаларды іздеуге қолдау тоқтатылады.