JavaRush /Blog Jawa /Random-JV /Napa logging dibutuhake?

Napa logging dibutuhake?

Diterbitake ing grup
Hello! Nalika nulis ceramah, aku utamané nyathet yen topik tartamtu bakal digunakake ing karya nyata. Napa sampeyan kudu logging - 1 Dadi, ATTENTION! Topik sing bakal kita deleng saiki bakal migunani kanggo sampeyan ing kabeh proyek sampeyan wiwit dina pisanan kerja. Kita bakal ngomong babagan logging. Topik iki ora angel (aku malah ngomong gampang). Nanging ing pakaryan pisanan sampeyan wis cukup stres kanggo ngatasi perkara sing jelas, mula luwih becik ngurutake kanthi lengkap saiki :) Dadi, ayo miwiti. Apa logging? Logging yaiku ngrekam data ing endi wae babagan operasi program. Papan ing ngendi data iki ditulis diarani " log ". Loro pitakonan muncul bebarengan: ngendi lan data apa sing direkam? Ayo dadi miwiti karo "ngendi". Sampeyan bisa ngrekam data operasi program ing macem-macem panggonan. Contone, sajrone sinau, sampeyan asring ngasilake data menyang konsol nggunakake System.out.println(). Iki logging nyata, sanajan sing paling gampang. Mesthi, iki ora trep banget kanggo klien utawa tim dhukungan produk: mesthine ora pengin nginstal IDE lan ngawasi konsol :) Ana uga format sing luwih akrab kanggo ngrekam informasi - ing file teks. Iku luwih gampang kanggo wong maca cara iki, lan mesthi luwih gampang kanggo nyimpen! Saiki pitakonan kapindho: apa data babagan operasi program kudu direkam ing log? Nanging ing kene kabeh gumantung sampeyan! Sistem logging Java fleksibel banget. Sampeyan bisa ngatur kanthi cara supaya kabeh kemajuan program sampeyan bakal dicathet. Ing tangan siji, iki apik. Nanging ing sisih liya, bayangake apa ukuran log Facebook utawa Twitter bisa tekan yen kabeh ditulis ing kono. Perusahaan gedhe kasebut bisa uga duwe kemampuan kanggo nyimpen informasi kasebut. Nanging mbayangno sepira angel golek informasi babagan kesalahan kritis ing log sing ngemot 500 gigabyte teks? Malah luwih elek tinimbang jarum ing tumpukan jerami. Mula, mlebu ing Jawa bisa dikonfigurasi supaya mung data kesalahan sing ditulis ing log (log). Utawa malah mung babagan kesalahan kritis! Senajan, ngomong "log in Jawa" ora sakabehe bener. Kasunyatane yaiku kebutuhan kanggo logging muncul ing antarane programer sadurunge fungsionalitas iki ditambahake ing basa kasebut. Lan nalika Jawa duwe perpustakaan logging dhewe, kabeh wong wis nggunakake perpustakaan log4j. Sejarah tampilan logging ing Jawa pancen dawa banget lan informatif; ing wektu luang, sampeyan bisa maca kiriman iki ing Habré . Ing cendhak, Jawa nduweni perpustakaan logging dhewe, nanging meh ora ana sing nggunakake :) Mengko, nalika sawetara perpustakaan logging beda muncul, lan kabeh programer wiwit nggunakake macem-macem, masalah kompatibilitas muncul. Kanggo nyegah wong nindakake perkara sing padha nggunakake puluhan perpustakaan sing beda-beda kanthi antarmuka sing beda, kerangka abstraksi slf4j digawe.(“Service Logging Facade For Java”). Disebut abstracting amarga sanajan sampeyan nggunakake kelas slf4j lan nelpon cara sing, ing hood padha kabeh frameworks logging sadurungé mlaku: log4j, java.util.logging standar lan liya-liyane. Yen saiki sampeyan mbutuhake sawetara fitur tartamtu saka log4j sing perpustakaan liyane ora duwe, nanging sampeyan ora pengin strictly link project kanggo perpustakaan tartamtu iki, mung nggunakake slf4j. Lan dheweke bakal "narik" cara log4j. Yen sampeyan ngganti pikiran lan mutusake yen sampeyan ora perlu maneh fitur log4j, sampeyan mung kudu reconfigure "wrapper" (sing, slf4j) kanggo nggunakake perpustakaan liyane. Kode sampeyan ora bakal mandheg, amarga sampeyan nelpon metode slf4j, lan dudu perpustakaan tartamtu. A digression cilik. Kanggo conto ing ngisor iki, sampeyan kudu ngundhuh perpustakaan slf4j saka kene , lan perpustakaan log4j saka kene . Sabanjure, kita kudu mbongkar arsip lan nambah file jar sing kita butuhake menyang classpath liwat Intellij IDEA. Item menu: File -> Struktur Proyek -> Pustaka Pilih jar sing dibutuhake lan tambahake menyang proyek kasebut (ana akeh jar ing arsip sing diundhuh, deleng sing sampeyan butuhake ing gambar) Napa sampeyan kudu logging - 2Napa sampeyan kudu logging - 3Wigati - instruksi iki kanggo sing siswa sing ora ngerti carane nggunakake Maven. Yen sampeyan ngerti carane nggunakake, iku luwih apik kanggo nyoba miwiti karo: biasane luwih gampang Yen sampeyan nggunakake Maven , nambah dependensi iki:
<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.14.0</version>
</dependency>
Great, kita wis diurutake metu setelan :) Ayo kang katon ing carane slf4j dianggo. Kepiye carane kita bisa nggawe manawa kemajuan program kasebut direkam ing endi wae? Kanggo iki kita butuh rong perkara - logger lan appender . Ayo dadi miwiti karo pisanan. Logger minangka obyek sing ngatur kabeh rekaman . Nggawe logger gampang banget: wis rampung nggunakake cara statis - LoggerFactory.getLogger(). Minangka parameter kanggo cara, sampeyan kudu pass kelas kang karya bakal mlebu. Ayo mbukak kode kita:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyTestClass {

   public static final Logger LOGGER = LoggerFactory.getLogger(MyTestClass.class);

   public static void main(String[] args) {

       LOGGER.info("Test log record!!!");
       LOGGER.error("В программе возникла ошибка!");
   }
}
Output konsol: ERROR StatusLogger Ora ditemokake file konfigurasi Log4j 2. Nggunakake konfigurasi gawan (mlebu mung kasalahan kanggo console), utawa pangguna programmatically kasedhiya konfigurasi. Setel properti sistem 'log4j2.debug' kanggo nuduhake Log4j 2 log initialization internal. Waca https://logging.apache.org/log4j/2.x/manual/configuration.html kanggo instruksi babagan carane ngatur Log4j 2 15:49:08.907 [utama] ERROR MyTestClass - Ana kesalahan ing program! Apa sing kita deleng ing kene? Pisanan kita ndeleng pesen kesalahan. Katon amarga saiki kita ora duwe setelan sing dibutuhake. Mulane, logger kita saiki mung bisa ngirim pesen kesalahan (ERROR) lan mung menyang console. Cara kasebut logger.info()ora ditindakake. Nanging logger.error()makarya! Konsol nampilake tanggal saiki, cara ana kesalahan ( main), tembung ERROR lan pesen kita! ERROR minangka level logging. Umumé, yen entri log ditandhani nganggo tembung ERROR, tegese ana kesalahan ing titik kasebut ing program kasebut. Yen entri ditandhani nganggo tembung INFO, tegese mung informasi saiki babagan operasi normal program kasebut. Perpustakaan SLF4J duwe sawetara tingkat logging beda sing ngidini sampeyan ngatur log kanthi fleksibel. Dheweke gampang banget kanggo ngatur: kabeh logika sing dibutuhake wis kalebu ing kelas Logger. Sampeyan mung kudu nelpon cara sing perlu. Yen sampeyan pengin ngirim pesen biasa, nelpon logger.info(). Pesen kesalahan - logger.error(). Tampilake bebaya - logger.warn() Saiki ayo ngomong babagan appender . Appender minangka papan ing ngendi data sampeyan teka. Sampeyan bisa ngomong ngelawan saka sumber data "titik B." Kanthi gawan, data diowahi menyang console. Wigati dimangerteni manawa ing conto sadurunge kita ora kudu ngatur apa-apa: teks katon ing console dhewe, nanging logger saka perpustakaan log4j mung bisa output pesen tingkat ERROR menyang console. Temenan luwih trep kanggo wong maca log saka file teks lan nyimpen log ing file sing padha. Kanggo ngganti prilaku standar saka logger, kita kudu ngatur appender file kita . Kanggo miwiti, sampeyan kudu nggawe file log4j.xml ing folder src , utawa ing folder sumber daya, yen sampeyan nggunakake Maven, utawa ing folder sumber daya, yen sampeyan nggunakake Maven. Sampeyan wis kenal karo format xml, kita bubar wis kuliah babagan iki :) Iki minangka isine:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
   <Appenders>
       <File name="MyFileAppender" fileName="C:\Users\Username\Desktop\testlog.txt" immediateFlush="false" append="false">
           <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
       </File>
   </Appenders>
   <Loggers>
       <Root level="INFO">
           <AppenderRef ref="MyFileAppender"/>
       </Root>
   </Loggers>
</Configuration>
Iku ora katon utamané rumit :) Nanging ayo isih mbukak liwat isi.
<Configuration status="INFO">
Iki sing diarani status-logger. Ora ana hubungane karo logger kita lan digunakake sacara internal dening log4j. Sampeyan bisa nyetel status = "TRACE" tinimbang status = "INFO", lan kabeh informasi babagan cara kerja internal log4j bakal dikirim menyang konsol (status-logger ngasilake data menyang konsol, sanajan appender kanggo program kasebut minangka file. - adhedhasar). Saiki kita ora butuh iki, mula kabeh bakal ditinggalake.
<Appenders>
   <File name="MyFileAppender" fileName="C:\Users\Евгений\Desktop\testlog.txt" append="true">
       <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
   </File>
</Appenders>
Kene kita nggawe appender kita. Tag kasebut <File>nuduhake yen bakal dadi file. name="MyFileAppender"- jeneng appender kita. fileName="C:\Users\Username\Desktop\testlog.txt"- path menyang file log ing ngendi kabeh data bakal ditulis. append="true"- apa perlu kanggo nulis data tambahan kanggo mburi file. Ing kasus kita iki bakal dadi. Yen disetel menyang false , isi log lawas bakal dibusak saben-saben program diwiwiti maneh. <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>- Iki minangka setelan format. Ing kene kita bisa nggunakake ekspresi reguler kanggo ngatur format teks ing log kita.
<Loggers>
       <Root level="INFO">
           <AppenderRef ref="MyFileAppender"/>
       </Root>
</Loggers>
Ing kene kita nemtokake level logging (level root). Kita duwe set level INFO: yaiku, kabeh pesen ing tingkat sing luwih dhuwur tinimbang INFO (miturut tabel sing kita deleng ing ndhuwur) ora bakal kalebu ing log. Kita bakal duwe 3 pesen ing program kita: siji INFO, siji WARN lan siji ERROR. Kanthi konfigurasi saiki, kabeh 3 pesen bakal ditulis ing log. Yen sampeyan ngganti tingkat ROOT kanggo ERROR, mung pesen pungkasan saka LOGGER.error () bakal mlebu. Kajaba iku, link menyang appender diselehake ing kene. Kanggo nggawe link kasebut, sampeyan kudu <Root>nggawe tag ing jero tag <ApprenderRef>lan nambah parameter kasebut ref=”Name твоего аппендера”. Kita nggawe jeneng appender ing kene, yen sampeyan kelalen: <File name="MyFileAppender" Lan iki kode program kita!
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyTestClass {

   public static final Logger LOGGER = LoggerFactory.getLogger(MyTestClass.class);

   public static void main(String[] args) {

       LOGGER.info("Начало работы программы!!!");

       try {
           LOGGER.warn("Внимание! Программа пытается разделить одно число на другое");
           System.out.println(12/0);
       } catch (ArithmeticException x) {

           LOGGER.error("Ошибка! Произошло деление на ноль!");
       }
   }
}
Mesthi, iku sethitik bengkong (nyekel RuntimeException punika idea biasa-biasa wae), nanging iku sampurna kanggo tujuan kita :) Ayo kita mbukak cara kita main()4 kaping saurutan lan katon ing file testlog.txt kita. Ora perlu nggawe sadurunge: perpustakaan bakal nindakake kanthi otomatis. Kabeh bisa! :) Saiki sampeyan duwe logger sing dikonfigurasi. Sampeyan bisa muter-muter karo sawetara program sing ditulis sadurungé, nambah telpon logger kanggo kabeh cara, lan katon ing log asil :) Kanggo maca tambahan, Aku Highly Rekomendasi artikel iki . Ing kana, topik logging dibahas kanthi jero, lan ora bakal gampang diwaca ing siji lungguh. Nanging ngemot akeh informasi tambahan sing migunani. Contone, sampeyan bakal sinau carane ngatur logger supaya nggawe file teks anyar yen file testlog.txt kita tekan ukuran tartamtu :) Lan iki pungkasan saka pawulangan kita! Dina iki sampeyan sinau babagan topik sing penting banget, lan kawruh iki mesthi bakal migunani kanggo sampeyan ing mangsa ngarep. Sampai ketemu maneh! :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION