JavaRush /Блоги Java /Random-TG /Воридшавӣ ба Java: чӣ, чӣ тавр, дар куҷо ва бо чӣ?
Roman Beekeeper
Сатҳи

Воридшавӣ ба Java: чӣ, чӣ тавр, дар куҷо ва бо чӣ?

Дар гурӯҳ нашр шудааст
Салом ба ҳама, ҷомеаи JavaRush! Имрӯз мо дар бораи сабти Java сӯҳбат мекунем:
  1. Ин чист, чаро. Дар кадом мавридҳо истифода бурдан беҳтар аст, дар кадом ҳолат не?
  2. Дар Java кадом намудҳои татбиқи бақайдгирӣ мавҷуданд ва мо бояд бо ин гуногунрангӣ чӣ кор кунем?
  3. Сатҳи сабт. Биёед муҳокима кунем, ки appender чист ва чӣ гуна онро дуруст танзим кардан мумкин аст.
  4. Гиреҳҳои бақайдгирӣ ва чӣ гуна онҳоро дуруст танзим кардан лозим аст, то ҳама чиз тавре кор кунад, ки мо мехоҳем.
Ин мавод барои аудиторияи васеъ пешбинӣ шудааст. Ин ҳам барои онҳое, ки бо Java нав шинос мешаванд ва ҳам барои онҳое, ки аллакай кор мекунанд, аммо танҳо бо logger.info(“log something”); Let's Go!

Чаро ба қайд гирифтан лозим аст?

Биёед ҳолатҳои воқеиро дида бароем, ки дар он дарахтбурӣ мушкилотро ҳал мекунад. Ана як мисол аз кори ман. Нуқтаҳои барномавӣ мавҷуданд, ки бо хидматҳои дигар ҳамгиро мешаванд. Ман сабти ин нуқтаҳоро ҳамчун "алиби" истифода мебарам : агар ҳамгироӣ кор накунад, фаҳмидан осон хоҳад буд, ки мушкилот аз кадом тараф сарчашма гирифтааст. Инчунин тавсия дода мешавад, ки маълумоти муҳимеро, ки дар базаи маълумот захира карда шудаанд, сабт кунед. Масалан, сохтани корбари администратор. Ин маҳз ҳамон чизест, ки сабти ном кардан хуб мебуд.

Воситаҳои сабти Java

Сабзӣ: чӣ, чӣ тавр, дар куҷо ва бо чӣ?  - 2Қарорҳои маъруф барои воридшавӣ дар Java иборатанд аз:
  • log4j
  • JUL - java.util.logging
  • JCL - Ҷакарта Commons logging
  • Воридшавӣ
  • SLF4J - фасадҳои оддии логистика барои java
Биёед ба ҳар яки онҳо зуд назар андозем ва дар қисми амалии мавод мо пайвастагии Slf4j - log4j -ро ҳамчун асос мегирем . Ин ҳоло аҷиб ба назар мерасад, аммо хавотир нашав: дар охири мақола ҳама чиз равшан хоҳад шуд.

System.err.println

Дар аввал, албатта, System.err.println мавҷуд буд (баромади сабт ба консол). Он ҳоло ҳам барои зуд ба даст овардани гузориш дар вақти ислоҳкунӣ истифода мешавад. Албатта, дар ин ҷо ҳеҷ гуна танзимот сӯҳбат кардан лозим нест, аз ин рӯ биёед онро дар хотир нигоҳ дорем ва идома диҳем.

Log4j

Ин аллакай як ҳалли мукаммал буд, ки аз эҳтиёҷоти таҳиягарон сохта шудааст. Он як воситаи воқеан ҷолиб барои истифода шуд. Аз сабаби ҳолатҳои гуногун, ин қарор ҳеҷ гоҳ онро ба JDK ворид накардааст, ки тамоми ҷомеаро ба ташвиш овардааст. log4j дорои имконоти конфигуратсия буд, то сабти ном дар як баста фаъол com.example.typeва дар зербаста хомӯш карда шавад com.example.type.generic. Ин имкон дод, ки он чиро, ки бояд ба кайд гирифта шавад, аз чизи нодаркор зуд чудо карда шавад. Дар ин ҷо қайд кардан муҳим аст, ки ду versionи log4j вуҷуд дорад: 1.2.x ва 2.x.x, ки бо ҳамдигар мувофиқ нестанд . log4j чунин мафҳумро ба мисли appender , яъне абзоре, ки бо он гузоришҳо сабт мешаванд ва тарҳрезӣ - форматкунии log илова кардааст. Ин ба шумо имкон медиҳад, ки танҳо он чизеро, ки ба шумо лозим аст ва чӣ гуна ба шумо лозим аст, сабт кунед. Мо каме дертар дар бораи appender бештар сӯҳбат хоҳем кард.

JUL - java.util.logging

Яке аз бартариҳои калидӣ ҳалли он аст - JUL ба JDK (маҷмӯаи таҳияи Java) дохил карда шудааст. Мутаассифона, ҳангоми таҳияи он на log4j маъмул, балки ҳалли IBM буд, ки ба рушди он таъсир расонд. Дар хакикат, дар айни хол ЖУЛ мавчуд аст, аммо касе аз он истифода намебарад. Аз "со-со": дар ИЮЛ сатҳҳои сабткунӣ аз он чизе, ки дар Logback, Log4j, Slf4j мавҷуд аст, фарқ мекунанд ва ин фаҳмиши байни онҳоро бадтар мекунад. Эҷоди як логгер бештар ё камтар монанд аст. Барои ин шумо бояд ворид кунед:
java.util.logging.Logger log = java.util.logging.Logger.getLogger(LoggingJul.class.getName());
Номи синф ба таври махсус барои фаҳмидани он, ки сабтгоҳҳ аз куҷо меояд, дода мешавад. Аз Java 8, он имконпазир аст, ки Supplier<String>. Ин барои ҳисоб кардан ва сохтани сатр танҳо дар лаҳзае, ки он воқеан лозим аст, кӯмак мекунад, на ҳама вақт, мисли пештара. Танҳо бо нашри Java 8 таҳиягарон мушкилоти муҳимро ҳал карданд, ки пас аз он JUL воқеан қобor истифода шуд. Маҳз, усулҳо бо далелҳо Supplier<String> msgSupplier, ки дар зер нишон дода шудаанд:
public void info(Supplier<String> msgSupplier) {
   log(Level.INFO, msgSupplier);
}

JCL - Ҷакарта Commons logging

Аз сабаби он, ки дар муддати тӯлонӣ стандарти саноатӣ дар коркарди дарахтбурӣ вуҷуд надошт ва даврае буд, ки бисёр одамон логгери фармоишии худро эҷод карданд, онҳо тасмим гирифтанд, ки JCL - як парпечи маъмуле, ки дар болои дигарон истифода мешавад, бароварда шаванд. Чаро? Вақте ки баъзе вобастагиҳо ба лоиҳа илова карда шуданд, онҳо метавонистанд як сабти дигарро аз сабткунандаи лоиҳа истифода баранд. Аз ин рӯ, онҳо ба таври гузаранда ба лоиҳа илова карда шуданд, ки ҳангоми кӯшиши якҷоя кардани он мушкилоти воқеӣ ба вуҷуд овард. Мутаассифона, парпеч аз ҷиҳати функсионалӣ хеле бад буд ва ҳеҷ гуна иловаҳоро ворид накардааст. Эҳтимол қулай мебуд, агар ҳама барои иҷрои кори худ JCL истифода мекарданд. Аммо дар асл ин тавр нашуд, аз ин рӯ истифодаи JCL дар айни замон фикри хуб нест.

Воридшавӣ

Роҳи кушодаасос то чӣ андоза душвор аст... Logback аз ҷониби ҳамон таҳиякунанда ҳамчун log4j барои эҷоди вориси он навишта шудааст. Идея бо log4j якхела буд. Тафовутҳо дар сабти ном буданд:
  • иҷрои беҳтар;
  • дастгирии модарӣ барои slf4j иловашуда;
  • Варианти филтр васеъ карда шуд.
Бо нобаёнӣ, бозгашт ба ягон танзимот лозим нест ва ҳамаи гузоришҳоро аз сатҳи DEBUG ва болотар сабт мекунад. Агар конфигуратсия лозим бошад, онро тавассути конфигуратсияи xml анҷом додан мумкин аст:
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>app.log</file>
        <encoder>
            <pattern>%d{HH:mm:ss,SSS} %-5p [%c] - %m%n</pattern>
        </encoder>
    </appender>
    <logger name="org.hibernate.SQL" level="DEBUG" />
    <logger name="org.hibernate.type.descriptor.sql" level="TRACE" />
    <root level="info">
        <appender-ref ref="FILE" />
    </root>
</configuration>

SLF4J - фасадҳои оддии логистика барои java

Тақрибан дар соли 2006, яке аз асосгузорони log4j лоиҳаро тарк кард ва slf4j - Facade Simple Logging for Java - як парпеч дар атрофи log4j, JUL, умумӣ-логгинҳо ва logback -ро эҷод кард. Тавре ки мебинед, пешравӣ ба ҷое расидааст, ки онҳо дар болои пӯшанда як парпеч сохтаанд... Гузашта аз ин, он ба ду қисм тақсим мешавад: API, ки дар барнома истифода мешавад ва татбиқ, ки ҳамчун илова карда мешавад. вобастагии алоҳида барои ҳар як намуди бақайдгирӣ. Барои намуна, slf4j-log4j12.jar, slf4j-jdk14.jar. Барои пайваст кардани татбиқи дуруст кофӣ аст ва ин аст: тамоми лоиҳа бо он кор хоҳад кард. Slf4j ҳама хусусиятҳои навро дастгирӣ мекунад, ба монанди форматкунии сатр барои сабт. Пештар чунин мушкилот вуҷуд дошт. Биёед бигӯем, ки як сабти журнал мавҷуд аст:
log.debug("User " + user + " connected from " + request.getRemoteAddr());
Дар an object аз сабаби пайвастани сатр userтабдor ғайриоддӣ вуҷуд дорад user.toString()ва ин вақтро мегирад, ки системаро суст мекунад. Ва ҳама чиз хуб аст, агар мо барномаро ислоҳ кунем. Агар сатҳи сабти ин синф INFO ва болотар бошад, мушкилот сар мешавад. Яъне ин гузориш набояд навишта шавад ва пайвастани сатр низ набояд иҷро шавад. Дар назария, ин бояд аз ҷониби худи китобхонаи бақайдгирӣ қарор дода мешуд. Гузашта аз ин, ин бузургтарин мушкor versionи якуми log4j буд. Онҳо ҳалли муқаррариро пешниҳод накарданд, аммо пешниҳод карданд, ки ин корро чунин анҷом диҳед:
if (log.isDebugEnabled()) {
    log.debug("User " + user + " connected from " + request.getRemoteAddr());
}
Яъне ба чои як хатти кадкашй 3(!) навиштанро пешниход карданд. Гузариш бояд тағиротро ба code кам кунад ва се сатр ба равиши умумӣ мухолифат кунад. slf4j бо JDK ва API ҳеҷ мушкorе надошт, бинобар ин ҳалли зебо фавран пайдо шуд:
log.debug("User {} connected from {}", user, request.getRemoteAddr());
ки дар он {}дохил кардани аргументхое, ки дар усул гузаронида мешаванд, ишора мекунанд. Яъне, якум {}ба user, дуюмаш {}- request.getRemoteAddr(). Аз ин сабаб, танҳо агар сатҳи сабткунӣ ба қайдгириро иҷозат диҳад, ин паёмро метавон ба як паём муттаҳид кард. Пас аз ин, SJF4J зуд маъруфият пайдо кард ва дар айни замон беҳтарин роҳи ҳалли он аст. Аз ин рӯ, мо бо истифода аз мисоли бастаи сабтро баррасӣ хоҳем кард slf4j-log4j12.

Чӣ бояд ба қайд гирифта шавад

Албатта, шумо набояд ҳама чизро сабт кунед. Баъзан ин нолозим ва ҳатто хатарнок аст. Масалан, агар шумо маълумоти шахсии касеро ба гарав гузоред ва он гӯё ошкор шавад, мушкилоти воқеӣ ба миён меояд, бахусус дар лоиҳаҳои ба Ғарб нигаронидашуда. Аммо як чизе низ ҳаст, ки барои сабти ном ҳатмӣ аст :
  1. Оғоз/охири барнома. Мо бояд донем, ки барнома воқеан тавре оғоз шуд, ки мо интизор будем ва ба анҷом расид.
  2. Саволҳои амниятӣ. Дар ин ҷо хуб мебуд, ки кӯшишҳои тахминии паролро сабт кунед, воридшавии корбарони муҳим ва ғайра.
  3. Баъзе ҳолатҳои ариза . Масалан, гузариш аз як ҳолат ба ҳолати дигар дар раванди тиҷорат.
  4. Баъзе маълумот барои ислоҳи хатогӣ , бо сатҳи мувофиқи сабт.
  5. Баъзе скриптҳои SQL. Ҳодисаҳои воқеӣ вуҷуд доранд, ки ин зарур аст. Боз, бо моҳирона танзим кардани сатҳҳо, ба натиҷаҳои аъло ноил шудан мумкин аст.
  6. Риштаҳои иҷрошударо (Thread) дар ҳолатҳое сабт кардан мумкин аст, ки кори дуруст тафтиш карда мешавад.

Хатогиҳои маъмули сабти ном

Нозукиҳои зиёд мавҷуданд, аммо инҳоянд чанд хатогиҳои маъмул:
  1. Сабти зиёдатӣ. Шумо набояд ҳар як қадамеро, ки аз ҷиҳати назариявӣ муҳим бошад, сабт кунед. Қоида вуҷуд дорад: гузоришҳо метавонанд иҷрои корро на бештар аз 10% бор кунанд. Дар акси ҳол, мушкилоти иҷроиш вуҷуд хоҳад дошт.
  2. Ворид кардани ҳама маълумот дар як файл. Ин хондан/навиштани онро дар як нуқтаи муайян хеле душвор мегардонад, ногуфта намонад, ки дар системаҳои муайян маҳдудияти андозаи файл вуҷуд дорад.
  3. Истифодаи сатҳҳои сабти нодуруст. Ҳар як сатҳи бақайдгирӣ дорои ҳудуди равшан аст ва бояд эҳтиром карда шавад. Агар сарҳад норавшан бошад, шумо метавонед дар бораи кадом сатҳ истифода бурдан розӣ шавед.

Сатҳи сабт

x: намоён
МАЛОКАТ ХАТОГӢ Огоҳӣ диҳед МАЪЛУМОТ ДОБГ ИЗО ҲАМАИ
ХОМӮШ
МАЛОКАТ х
ХАТОГӢ х х
Огоҳӣ диҳед х х х
МАЪЛУМОТ х х х х
ДОБГ х х х х х
ИЗО х х х х х х
ҲАМАИ х х х х х х х
Сатҳи сабткунӣ чист? Барои ба навъе рутбабандии гузоришҳо, нишонаҳо ва фарқиятҳои муайян додан лозим буд. Бо ин максад дарачахои чубу тахта чорй карда шуданд. Дараҷа дар барнома муқаррар карда шудааст. Агар сабт ба сатҳи поёнтар аз сатҳи таъиншуда тааллуқ дошта бошад, он ба қайд гирифта намешавад. Масалан, мо гузоришҳое дорем, ки барои ислоҳи барнома истифода мешаванд. Дар кори муътадor истехсолй (вакте ки барнома мувофики максад истифода мешавад) чунин журналхо лозим нестанд. Аз ин рӯ, сатҳи сабткунӣ нисбат ба хатогиҳо баландтар хоҳад буд. Биёед ба сатҳҳо бо истифода аз log4j ҳамчун намуна назар кунем. Дигар қарорҳо, ба истиснои JUL, ҳамон сатҳҳоро истифода мебаранд. Дар ин ҷо онҳо бо тартиби кам мешаванд:
  • OFF: ҳеҷ гузориш навишта намешавад, ҳама сарфи назар карда мешаванд;
  • FATAL: хатогие, ки баъд аз он барнома дигар кор карда наметавонад ва қатъ мегардад, масалан, хатои JVM аз хотира;
  • ХАТО: Сатҳи хатогӣ ҳангоми мавҷудияти мушкилоте, ки бояд ҳал карда шаванд. Хатогӣ дар маҷмӯъ барномаро қатъ намекунад. Дигар дархостҳо метавонанд дуруст кор кунанд;
  • Огоҳӣ: Сабтҳоеро нишон медиҳад, ки дорои огоҳӣ мебошанд. Амали ғайричашмдошт рӯй дод, бо вуҷуди ин система муқовимат кард ва дархостро иҷро кард;
  • INFO: журнале, ки амалҳои муҳимро дар барнома сабт мекунад. Инҳо хатогиҳо нестанд, инҳо огоҳиҳо нестанд, ин амалҳои интизории система мебошанд;
  • DEBUG: гузоришҳо барои ислоҳи барнома лозиманд. Барои таъмини он, ки система маҳз он чизеро, ки аз он интизор аст, иҷро мекунад ё барои тавсифи амали система: "метод1 ба кор шурӯъ кард";
  • TRACE: гузоришҳои афзалиятноки пасттар барои ислоҳи хатогиҳо бо сатҳи пасттарини сабти ном;
  • ҲАМАИ: сатҳе, ки дар он ҳамаи гузоришҳо аз система сабт карда мешаванд.
Маълум мешавад, ки агар сатҳи сабти INFO дар ягон ҷой дар барнома фаъол бошад, ҳама сатҳҳо аз INFO ва то FATAL сабт карда мешаванд. Агар сатҳи сабти сабти ном FATAL бошад, танҳо сабтҳои дорои ин сатҳ сабт карда мешаванд.

Сабт ва фиристодани гузоришҳо: Appender

Мо ин равандро бо истифода аз log4j ҳамчун мисол баррасӣ хоҳем кард: он барои сабт/фиристонидани гузоришҳо имкониятҳои васеъ фароҳам меорад:
  • барои навиштан ба файл - ҳалли DailyRollingFileAppender ;
  • барои гирифтани маълумот ба консоли барнома - ConsoleAppender ;
  • барои навиштани гузоришҳо ба пойгоҳи додаҳо - JDBCAppender ;
  • барои назорати интиқол тавассути TCP/IP - TelnetAppender ;
  • то боварӣ ҳосил кунед, ки сабткунӣ ба кор таъсир намерасонад - AsyncAppender .
Якчанд татбиқи дигар вуҷуд дорад: рӯйхати пурраро дар ин ҷо пайдо кардан мумкин аст . Дар омади гап, агар замимаи зарурӣ мавҷуд набошад, ин мушкилот нест. Шумо метавонед замимаи шахсии худро тавассути татбиқи интерфейси Appender нависед , ки танҳо log4j -ро қабул мекунад.

Гиреҳҳои бақайдгирӣ

Барои намоиш мо интерфейси slf4j ва татбиқро аз log4j истифода хоҳем кард. Эҷоди як сабтгоҳҳ хеле содда аст: шумо бояд дар синфе бо номи MainDemo, ки дар он сабтгоҳҳ анҷом дода мешавад, инҳоро нависед:
org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(MainDemo.class);
Ин барои мо як логгер эҷод мекунад. Барои ворид кардани сабт, шумо метавонед усулҳои зиёдеро истифода баред, ки нишон медиҳанд, ки сабтҳо дар кадом сатҳ анҷом дода мешаванд. Барои намуна:
logger.trace("Method 1 started with argument={}", argument);
logger.debug("Database updated with script = {}", script);
logger.info("Application has started on port = {}", port);
logger.warn("Log4j didn't find log4j.properties. Please, provide them");
logger.error("Connection refused to host = {}", host);
Гарчанде ки мо синфро мегузарем, дар охир номи пурраи синф бо бастаҳо навишта мешавад. Ин барои он анҷом дода мешавад, ки шумо метавонед сабтро ба гиреҳҳо тақсим кунед ва сатҳи сабт ва замимаи ҳар як гиреҳро танзим кунед. Масалан, номи синф: com.github.romankh3.logginglecture.MainDemo- дар он логгер сохта шудааст. Ва ин аст, ки чӣ тавр онро ба гиреҳҳои сабткунӣ тақсим кардан мумкин аст. Гиреҳи асосӣ нул RootLogger мебошад . Ин гиреҳест, ки ҳамаи гузоришҳои тамоми барномаро қабул мекунад. Қисми боқимондаро тавре ки дар зер нишон дода шудааст, тасвир кардан мумкин аст: Сабзӣ: чӣ, чӣ тавр, дар куҷо ва бо чӣ?  - 4Замимаҳо кори худро махсусан дар гиреҳҳои сабткунӣ танзим мекунанд. Ҳоло, бо истифода аз log4j.properties ҳамчун мисол , мо ба он мебинем, ки чӣ тавр онҳоро танзим кунем.

Қадам ба қадам насб кардани Log4j.properties

Акнун мо ҳама чизро қадам ба қадам танзим мекунем ва мебинем, ки чӣ кор кардан мумкин аст:
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
Ин сатр мегӯяд, ки мо замимаи CONSOLE-ро ба қайд гирифта истодаем, ки татбиқи org.apache.log4j.ConsoleAppender -ро истифода мебарад. Ин замима маълумотро ба консол менависад. Баъд, биёед замимаи дигареро қайд кунем, ки ба файл менависад:
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
Бояд қайд кард, ки замимаҳо ҳанӯз бояд танзим карда шаванд. Вақте ки мо аллакай замимаҳоро ба қайд гирифтаем, мо метавонем муайян кунем, ки дар гиреҳҳо кадом сатҳи сабткунӣ хоҳад буд ва кадом замимаҳо истифода мешаванд.

log4j.rootLogger=DEBUG, КОНСОЛ, ФАЙЛ

  • log4j.rootLogger маънои онро дорад, ки мо гиреҳи асосиро танзим мекунем, ки ҳамаи гузоришҳоро дар бар мегирад;
  • пас аз аломати баробар, калимаи аввал нишон медиҳад, ки дар кадом сатҳ ва баландтар сабтҳо сабт карда мешаванд (дар ҳолати мо, ин DEBUG аст);
  • пас аз вергул хамаи замимахои истифодашаванда нишон дода мешаванд.
Барои танзим кардани гиреҳи сабти мушаххас, шумо бояд вурудоти зеринро истифода баред:
log4j.logger.com.github.romankh3.logginglecture=TRACE, OWN, CONSOLE
ки log4j.logger.он барои танзими гиреҳи мушаххас истифода мешавад, дар ҳолати мо ин аст com.github.romankh3.logginglecture. Ва ҳоло биёед дар бораи насб кардани замимаи CONSOLE сӯҳбат кунем:
# CONSOLE appender customisation
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.threshold=DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] : %c:%L : %m%n
Дар ин ҷо мо мебинем, ки мо метавонем сатҳеро, ки замима аз он коркард мекунад, муқаррар кунем. Вазъияти воқеӣ: паём бо сатҳи иттилоот аз ҷониби гиреҳи сабти ном гирифта шуд ва ба замимаи ба он таъиншуда интиқол дода шуд, аммо замимакунанда бо сатҳи огоҳӣ ва болотар ин гузоришро қабул кард, аммо бо он ҳеҷ коре накард. Баъдан, шумо бояд муайян кунед, ки дар паём кадом қолаб хоҳад буд. Ман дар мисол PatternLayout-ро истифода мебарам, аммо дар он ҷо роҳҳои зиёде мавҷуданд. Онҳо дар ин мақола ошкор карда намешаванд. Намунаи насби замимаи FILE:
# File appender customisation
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=./target/logging/logging.log
log4j.appender.FILE.MaxFileSize=1MB
log4j.appender.FILE.threshold=DEBUG
log4j.appender.FILE.MaxBackupIndex=2
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[ %-5p] - %c:%L - %m%n
Дар ин ҷо шумо метавонед танзим кунед, ки гузоришҳо ба кадом файл навишта мешаванд, тавре ки аз он дида мешавад
log4j.appender.FILE.File=./target/logging/logging.log
Сабт ба файл меравад logging.log. Барои пешгирӣ кардани мушкилот бо андозаи файл, шумо метавонед ҳадди аксарро муқаррар кунед: дар ин ҳолат, 1MB. MaxBackupIndex - мегӯяд, ки чӣ қадар чунин файлҳо мавҷуданд. Агар зиёда аз ин рақам эҷод карда шавад, файли аввал нест карда мешавад. Барои дидани як мисоли воқеӣ, ки дар он сабтгоҳҳ танзим карда шудааст, шумо метавонед ба анбори кушодаи GitHub равед.

Биёед, натиҷаро муттаҳид кунем

Кӯшиш кунед, ки ҳама чизеро, ки шумо тавсиф кардаед, иҷро кунед:
  • Лоиҳаи шахсии худро ба лоиҳаи дар мисоли боло монанд созед.
  • Агар шумо дар бораи истифодаи Maven дониш дошта бошед, мо онро истифода мебарем; агар не, ин ҷо истинод ба мақолаест, ки чӣ гуна пайваст кардани китобхонаро тавсиф мекунад.

Биёед онро чамъбаст кунем

  1. Мо дар бораи он сӯҳбат кардем, ки дар Java чӣ гуна қарорҳо мавҷуданд.
  2. Кариб хамаи китобхонахои маъ-луми дарахтбурй тахти назорати як кас навишта шуда буданд: Д
  3. Мо фаҳмидем, ки чиро сабт кардан лозим аст ва чӣ не.
  4. Мо сатҳи сабтро муайян кардем.
  5. Мо бо гиреххои кад-кабулкунй шинос шудем.
  6. Мо дида баромадем, ки appender чист ва он барои чӣ аст.
  7. Мо файли log4j.proterties-ро зина ба зина танзим кардем.

Маводҳои иловагӣ

  1. JavaRush: Сабт кардан. Як тӯби стектрасро кушоед
  2. JavaRush: Лексияи Logger
  3. Ҳабр: Сабти Java. Салом Ҷаҳон
  4. Ҳабр: Сабти Java: достони даҳшат
  5. Youtube: Курсҳои Головач. Сабткунї. Кисми 1 , Кисми 2 , Кисми 3 , Кисми 4
  6. Log4j: замимакунанда
  7. Log4j: тарҳрезӣ
Ба мақолаҳои дигари ман низ нигаред:
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION