Кіріспе

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-нан кем хабар жазады.

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 жобасының көптеген мүмкіндіктерін ұсынады.

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 нұсқасынан бастап хабарламаларды іздеуге қолдау тоқтатылады.