Кіріспе
Java журналдауының базасы - Java платформасы үшін компьютерлік деректерді журналдау пакеті. Бұл мақалада жалпы мақсаттағы журналды жүргізу жүйелері қарастырылады. Журналдау дегеніміз - бағдарламаның іс-әрекетін жазу және оны әзірлеу топтары жиі қолданады. Жазу жүйелері Java платформасы үшін жазу процесін жеңілдетеді және стандарттайды. Олар әсіресе консольға тікелей шығыс беруді болдырмау арқылы икемділікті қамтамасыз етеді (осыдан төмен қосымшаны қараңыз). Журналдар жазылған жерлер кодтан тәуелсіз болады және орындалу кезінде бейімделуі мүмкін. Өкінішке орай, JDK бастапқы шығарылымына журналды енгізбеді, сондықтан Java Logging API қосылған кезде бірнеше басқа журналды жүргізу жүйелері кеңінен қолданыла бастады, атап айтқанда Apache Commons Logging (жаңадан Java Commons Logging немесе JCL деп те аталады) және Log4j. Бұл әр түрлі үшінші тарап кітапханаларын (JAR) әрқайсысы әр түрлі журналды жүргізу жүйелерін қолдана отырып біріктіру кезінде қиындықтарға әкелді. Бұл мәселені шешу үшін ағаш кесу үшін ілгішпен ілесетін (ораушы) конструкциялар жасалды.
Функционалдық тұжырымдама
Логгерлік жүйеде үш негізгі бөлім бар: Логгер, Форматтаушы және Апендер (немесе Хандлер). Logger белгілі бір метадеректермен бірге тіркелетін хабарламаны түсіріп, оны тіркеу жүйесіне тапсыруға жауапты. Хабарды алғаннан кейін фреймворк оны шығару үшін форматтайтын хабарды Formatter деп атайды. Фреймворк форматталған хабарламаны тиісті қосымшаға / өңдеушіге жіберу үшін береді. Бұл консоль дисплейіне шығаруды, дискіге жазуды, деректер қорына қосуды немесе электрондық поштаны құруды қамтиды. Қарапайым жүйелер, мысалы, Object Guy-тің жүйелік жүйесі, тіркегіш пен қосымшаны біріктіреді. Бұл әдетті операцияны жеңілдетеді, бірақ ол конфигурациялануы аз, әсіресе егер жоба ортада жылжыса.
Ағаш кесуші
Логгер - бұл бағдарламаның шығыс қай жерде жіберілгеніне/сақталғанына қарамастан тіркеуге мүмкіндік беретін объекті. Қолданба хабарды бір нысанды немесе нысанды және рұқсат етілетін ауырлық деңгейі бар ерекшелікті берілген атау/сәйкестендірушімен тіркеуші объектіге беру арқылы тіркейді.
Қателік деңгейі
Хабар белгілі бір деңгейде тіркеледі. Жалпы деңгей атаулары Apache Commons Logging-тен көшіріледі (жазба API-і әртүрлі деңгей атауларын анықтайтын болса да): + Жалпы деңгейлер деңгей сипаттамасы FATALS, ертерек тоқтатылуға әкелетін үлкен қателер. Бұл мәліметтерді бірден күй-күй консоліне көруге болады. Қате Басқа орындау кезіндегі қателер немесе күтпеген жағдайлар. Бұл мәліметтерді бірден күй-күй консоліне көруге болады. Ескерту: Ескірген API-лерді пайдалану, API-лерді дұрыс қолданбау, "жақын" қателер, басқа да жағымсыз немесе күтпеген, бірақ міндетті түрде "қате" емес орындалу уақытындағы жағдайлар. Бұл мәліметтерді бірден күй-күй консоліне көруге болады. INFOҚызықты орындалу уақыты оқиғалары (жұмысты бастау/жұмысты тоқтату). Бұл құрылғыларды бірден көрінеді деп күтіңіз, сондықтан сақтық жасап, барынша аз мөлшерде сақтаңыз. DEBUG жүйе арқылы ағынды туралы егжей-тегжейлі ақпарат. Бұл тек журналда ғана жазылады деп күтіңіз. ТРАЦЕтақырықты ақпарат. Бұл тек журналда ғана жазылады деп күтіңіз. Ағаш кесу жүйесі әрбір ағаш кесуші үшін ағаш кесудің ағымдағы деңгейін сақтайды. Ағаш кесу деңгейі аздап немесе көп шектеу қойылуы мүмкін. Мысалы, егер журналдау деңгейі "WARNING" деп орнатылса, онда осы деңгейдегі немесе одан жоғары барлық хабарламалар журналдалады: ERROR және FATAL. Қателік деңгейі ағаш кесушілерге де, ағаш кесушілерге де тағайындалуы мүмкін. Екісі де берілген ауырлық деңгейінде іске қосылуы керек. Сонымен, егер хабарламаны алатын өңдеуші де жөндеуге рұқсат етілмесе, жөндеу шығысына рұқсат етілген журналдағыш шығыс жасамайды.
+ Common levels Level DescriptionFATALSevere errors that cause premature termination. Expect these to be immediately visible on a status console. ERROROther runtime errors or unexpected conditions. Expect these to be immediately visible on a status console. WARNINGUse of deprecated APIs, poor use of API, 'almost' errors, other runtime situations that are undesirable or unexpected, but not necessarily "wrong". Expect these to be immediately visible on a status console. INFOInteresting runtime events (startup/shutdown). Expect these to be immediately visible on a console, so be conservative and keep to a minimum. DEBUGdetailed information on the flow through the system. Expect these to be written to logs only. TRACEmore detailed information. Expect these to be written to logs only. The logging framework maintains the current logging level for each logger. The logging level can be set more or less restrictive. For example, if the logging level is set to "WARNING", then all messages of that level or higher are logged: ERROR and FATAL. Severity levels can be assigned to both loggers and appenders. Both must be enabled for a given severity level for output to be generated. So a logger enabled for debug output will not generate output if the handler that gets the message is not also enabled for debug.
Сүзгілер
Сүзгілер журналдағы оқиғаларды елемеуге немесе журналдауға себеп болады. Ең жиі қолданылатын сүзгі - алдыңғы бөлімде көрсетілген тіркеу деңгейі. Log4j 2 және SLF4J сияқты журналды жазу жүйелері сонымен қатар Маркерлерді ұсынады, олар журналды оқиғаға қосылған кезде фильтрлеу үшін де пайдаланылуы мүмкін. Сүзгілерді сондай-ақ шығарылған ерекшеліктерге, журнал хабарламасындағы деректерге, журнал API арқылы ашылған ThreadLocal-дегі деректерге немесе басқа да әдістерге негізделген журнал оқиғаларын қабылдауға немесе қабылдамау үшін пайдалануға болады.
Форматтау, кескінді немесе рендерингті машиналар
Форматтаушы - берілген нысанды форматтайтын объект. Көбінесе бұл бинарлық нысанды алып, оны тізбекті бейнелеуге айналдырудан тұрады. Әрбір фреймворк қалаған жағдайда ауыстырылатын әдетті шығыс форматын анықтайды.
Қасиеттерді салыстыру
Log4j 1 2015 жылы "Өмірінің соңы" деп жарияланды және басқа журналдаумен қатар, осы API-нің іске асырылуымен бірге пайдаланылатын API-ді қамтамасыз ететін Log4j 2мен алмастырылды. Apache License, Version 2.0 Java Logging API Logging Framework SEVERE WARNING INFO CONFIG FINE FINER FINEST Sun-тің әдетті Java виртуалды машинасында (JVM) келесілер бар: ConsoleHandler, FileHandler, SocketHandler, MemoryHandler JRE tinylogging Logging Framework ERROR WARNING INFO DEBUG TRACE ConsoleWriter, FileWriter, LogcatWriter, JdbcWriter, RollingFileWriter, SharedFileWriter және (барлық журналдағы жазбаларды жоққа шығарады) Apache License, Version 2.0 Logback Logging Logging Framework ERROR WARNING INFO DEBUG TRACE тізімдейтіндер көп: қараңыз Appender Java TooDoc Log4j орнын ауыстыру үшін жасалды, көптеген жақсартулармен. Көптеген жобалар қолданады, әдетте slf4j-дің артында, мысалы Akka, Apache Camel, Apache Cocoon, Artifactory, Gradle, Lift Framework, Play Framework, Scalatra, SonarQube, Spring Boot, LGPL, Version 2.1 Apache Commons Logging (JCL) Logging Wrapper FATAL ERROR WARN INFO DEBUG TRACE Негізгі негіздемеге байланысты Кеңінен қолданылады, көбінесе Log4j Apache License, Version 2.0 SLF4J Logging Wrapper ERROR WARN INFO DEBUG TRACE Қосылатын негізгі негіздемеге байланысты. JCL, JDK және Log4j журналдауыш пакеттері үшін API-ге үйлесімді шимдерді ұсынады. Ол сондай-ақ олардың кез келгенін шығыс жасау үшін пайдалана алады. Егер бар болса, шығыс үшін Logback пайдалану әдетті. Көптеген жобалар мен платформаларда кеңінен қолданылады, көбінесе Logback іске асырылуымен. MIT лицензиясы
Қарастырылатын мәселелер
JCL және Log4j өте кең таралған, өйткені олар ұзақ уақыт бойы болды және ұзақ уақыт бойы жалғыз таңдау болды. slf4j-нің икемділігі (астындағы Logback-ті пайдалану) оны танымал таңдау етті. SLF4J - бұл кез-келген басқа жүйелерді еліктеуге мүмкіндік беретін бүркемелеу орамаларының (немесе шұңқырлардың) жиынтығы. Осылайша, әрқайсысы таңдаған журналды жазу шеңберіне қарамастан, бірнеше үшінші тарап кітапханаларын бір қосымшаға қосуға болады. Алайда, барлық журналдау шығысы стандартты түрде, әдетте Logback арқылы жасалады. Log4j 2 API-ді де, оны іске асыруды да ұсынады. API-ді SLF4J-ге ұқсас басқа журналдауға бағыттауға болады. SLF4J-ден айырмашылығы, Log4j 2 API қосымша икемділік үшін Strings орнына Message объектілерін тіркейді және Java Lambda өрнектерін де қолдайды. JCL шын мәнінде жүйелік жүйе емес, бірін қаптау. Осылайша, оның астында журналға түсіру жүйесін қажет етеді, бірақ ол өзінің SimpleLog журналдағышын пайдалануды әдетті түрде жасай алады. JCL, SLF4J және Log4j 2 API қайта қолдануға болатын кітапханаларды әзірлеу кезінде пайдалы, олар қолданбаның қай негізгі журналдау жүйесіне жазғысы келсе, сол жүйеге жазу керек. Бұл жобаның әртүрлі орталарында да икемділік береді, өйткені орман кесу жүйесі өзгеруі мүмкін, бірақ көп жағдайда орман кесу жүйесі таңдалғаннан кейін оны жобаның өмір бойына өзгертудің қажеті жоқ. SLF4J және Log4j 2 жаңадан пайдаланып, ескі жүйелерден алынған сабақтарды пайдаланады. Сонымен қатар, JCL-ді ауыстырған қандай журнал кітапханасын қаптау керектігін анықтағанда, JCL-де кластық жүктеушілермен байланысты проблемалар бар. Java журналдау API Java-мен бірге беріледі. API-і Java-мен қамтамасыз етілген әдетті іске асырудан техникалық жағынан бөлек болғанымен, оны баламалы іске асырумен ауыстыру қиын болуы мүмкін, сондықтан көптеген әзірлеушілер бұл іске асыруды Java Logging API-мен шатастырады. Конфигурация тек сыртқы файлдармен ғана жасалады, оны тез арада өзгерту оңай емес (басқа фреймворктер бағдарламалық конфигурацияны қолдайды). Әдеттегі орындалу тек бірнеше өңдеушілерді және пішімдеушілерді ұсынады, яғни көпшілік пайдаланушылар өздерін жазуы керек.