JavaRush /Java Blog /Random-TK /Java giriş. Stektrace topuny açyň

Java giriş. Stektrace topuny açyň

Toparda çap edildi
"Giç ýagşy, bu gün senagat meýdançasynda bir waka ýazga alyndy, işläp düzüjiden derňew toparyna goşulmagyny haýyş edýärin." Iş günleriňiziň birinde şuňa meňzeş bir zat başlap biler ýa-da irden bolup biler - tapawudy ýok. Let'söne başdan başlalyň. JavaRush-da bu ýerdäki meseleleri çözmek bilen, işleýän we garaşylýan zady ýerine ýetirýän kod ýazmagy öwrenýärsiňiz. Kömek bölümine seretseňiz , munuň hemişe birinji gezek işlemeýändigi düşnüklidir. Iş ýerinde-de edil şonuň ýaly bolar. Bir meseläni hemişe ilkinji gezek çözüp bilmersiňiz: kemçilikler baky ýoldaşlarymyz. Bugalňyşlyk hadysalaryny dikeltmek möhümdir. Gingurnal.  Stektrace topuny açyň - 1Bir mysal bilen başlalyň. Polisiýa işgärdigiňizi göz öňüne getireliň. Wakanyň bolan ýerine çagyryldyňyz (dükanda aýna döwüldi), geldiňiz we bolup geçen zatlar hakda sizden jogap garaşýarlar. Nireden başlamaly? Polisiýanyň nähili işleýändigini bilemok. Örän şertli - şaýatlary, subutnamalary we beýleki zatlary gözläp başlaýarlar. Placeeriň özi näme bolandygyny jikme-jik aýdyp bilse näme etmeli? Mysal üçin, şuňa meňzeş:
  • 21:59 eýesi jaňy ýakdy (doly işjeňleşýänçä 5 minut)
  • 22:00 eýesi gapyny ýapdy
  • 22:05 doly duýduryş işjeňleşdirilmegi
  • 22:06 eýesi tutawajyny çekdi
  • 23:15 ses datçigi açyldy
  • 23:15 itleriň bir topary gaty ses bilen geçip gitdi
  • 23:15 ses datçigi öçdi
  • 01:17 Ekranyň daşky aýnasyndaky zarba datçigi açyldy
  • 01:17 bir kepderi stakana uçdy
  • 01:17 aýna döwüldi
  • 01:17 siren
  • 01:17 kepderi özüni silkdi we uçup gitdi
Dogrusy, beýle jikme-jiklikleri uzak wagtlap öwrenmek hökman däl, näme bolany derrew düşnükli. Ösüşde-de edil şonuň ýaly. Whatazgylardan näme bolandygyny aýdyp bilseň gaty gowy. Indi düzedişleri ýada salýan bolmagyňyz mümkin, sebäbi hemme zady düzedip bilersiňiz. Noöne ýok. Öýe gitdiň, gije hemme zat döwüldi, düzetjek zat ýok: näme üçin döwülendigine düşünmeli we düzedmeli. Bu ýerde surnallaryň oýnaýan ýeri, bir gijede bolup geçen zatlaryň taryhy. Makalanyň dowamynda, täzelikleri diňleýänleriň (tomaşa edýänleriň) hemmesiniň eşiden iň meşhur ýazyjylarynyň biri (hakykatdanam ýazyjy däl, gözegçilik ýaly) hakda pikir etmegiňizi maslahat berýärin? Onuň kömegi bilen käbir wakalar dikeldildi. Indi çynlakaý seredeliň. Java-a girmek, kodda bolup geçýän wakalary ýazga almak prosesi. Programmaçy hökmünde koduňyzyň edenini ýazmak siziň jogapkärçiligiňizdir, sebäbi bu ýazgylar derňew üçin size berler. Everythinghli zat gowy ýerine ýetirilen bolsa, islendik näsazlyk düzüler we gaty çalt düzediler. Bu ýerde, haýsy agaç ýazgylarynyň bardygyny öwrenip bilmerin. Bu makalada özümizi ýönekeýler bilen çäklendireris java.util.Logger: biri-birimizi tanamak ýeterlikdir. Her gündelik ýazgyda sene-wagt, hadysanyň derejesi, habary bar. Sene we wagt awtomatiki girizilýär. Çäräniň derejesi habaryň awtory tarapyndan saýlanýar. Birnäçe derejeler bar. Esasylary maglumat, düzediş, ýalňyşlyk.
  • INFO - köplenç bular bolup geçýän zatlar hakda maglumat senesi, senesi boýunça taryh ýaly bir zat: 1915 - bir zat boldy, 1916 - başga bir zat.
  • DEBUG - belli bir pursatdaky wakalary has jikme-jik suratlandyrýar. Mysal üçin, taryhdaky söweşiň jikme-jiklikleri düzediş derejesinde. " Serkerde Takoýtowiç goşuny bilen Selowiça obasyna tarap öňe gitdi ."
  • RAL .YŞLYK - ýüze çykýan ýalňyşlyklar adatça şu ýerde ýazylýar. Bir zady gurşasaňyz try-catch, blokuň catchýerine çalşylýandygyny gören bolsaňyz gerek e.printStacktrace(). Diňe konsola girişi çykarýar. Kitap ýazgysyny ulanyp, bu ýazgyny ýazgyça iberip bilersiňiz (haha), pikiri alarsyňyz.
  • DUNDURYŞ - duýduryşlar şu ýerde ýazylýar. Mysal üçin, awtoulagda aşa gyzýan yşyk. Bu diňe duýduryş, bir zady üýtgetmek has gowudyr, ýöne bu bökdençlik däl. Enjam döwülende, RALRYŞLYK derejesi bilen gireris.
Derejeleri kesgitledik. Worryöne alada etme: olaryň arasyndaky setir gaty inçe - muny hemmeler düşündirip bilmez. Mundan başga-da, taslamadan taslama tapawutlanyp biler. Uly dörediji size haýsy derejede we nämä girmelidigini düşündirer. Esasy zat, bu ýazgylar geljekdäki derňew üçin ýeterlikdir. Bu bolsa uçuşda düşünilýär. Indiki sazlamalar. Logurnalistlere nirede ýazmalydygyny (konsola, faýla, jms ýa-da başga bir ýere) aýdyp bolar we derejesini kesgitläp bolar (maglumat, ýalňyşlyk, düzediş ...). Simpleönekeý ýazgyçymyz üçin sazlamalaryň mysaly şeýle:
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler

java.util.logging.FileHandler.level     = INFO
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.append    = true
java.util.logging.FileHandler.pattern   = log.%u.%g.txt

java.util.logging.ConsoleHandler.level     = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Bu ýagdaýda hemme zat ýazyjynyň bir faýla we konsola bir wagtda ýazmagy üçin düzülendir. Şu ýagdaýda? konsolda bir zat pozulsa, faýl bilen gözlemek has aňsat. Ikisine-de INFO derejesi. Faýl üçin at nagşy hem görkezilýär. Bu, konsola we faýla birbada ýazmaga mümkinçilik berýän minimal konfigurasiýa. faýldaky köne ýazgylar pozulmaz ýaly dogryjava.util.logging.FileHandler.append düzüldi . Ulanyşyň mysaly şeýledir (düşündirişsiz, ýazyjynyň özi teswir berýär):
public class Main {
    static Logger LOGGER;
    static {
        try(FileInputStream ins = new FileInputStream("C:\\log.config")){ \\полный путь до file с конфигами
            LogManager.getLogManager().readConfiguration(ins);
            LOGGER = Logger.getLogger(Main.class.getName());
        }catch (Exception ignore){
            ignore.printStackTrace();
        }
    }
    public static void main(String[] args) {
        try {
            LOGGER.log(Level.INFO,"Начало main, создаем лист с типизацией Integers");
            List<Integer> ints = new ArrayList<Integer>();
            LOGGER.log(Level.INFO,"присваиваем лист Integers листу без типипзации");
            List empty = ints;
            LOGGER.log(Level.INFO,"присваиваем лист без типипзации листу строк");
            List<String> string = empty;
            LOGGER.log(Level.WARNING,"добавляем строку \"бла бла\" в наш переприсвоенный лист, возможна ошибка");
            string.add("бла бла");
            LOGGER.log(Level.WARNING,"добавляем строку \"бла 23\" в наш переприсвоенный лист, возможна ошибка");
            string.add("бла 23");
            LOGGER.log(Level.WARNING,"добавляем строку \"бла 34\" в наш переприсвоенный лист, возможна ошибка");
            string.add("бла 34");


            LOGGER.log(Level.INFO,"выводим все элементы листа с типизацией Integers в консоль");
            for (Object anInt : ints) {
                System.out.println(anInt);
            }

            LOGGER.log(Level.INFO,"Размер equals " + ints.size());
            LOGGER.log(Level.INFO,"Получим первый элемент");
            Integer integer = ints.get(0);
            LOGGER.log(Level.INFO,"выведем его в консоль");
            System.out.println(integer);

        }catch (Exception e){
            LOGGER.log(Level.WARNING,"что-то пошло не так" , e);
        }
    }
}
Bu iň gowy mysal däl, elimdäki birini aldym. Mysal üçin çykyş:
апр 19, 2019 1:10:14 AM generics.Main main
INFO: Начало main, создаем лист с типизацией Integers
апр 19, 2019 1:10:14 AM generics.Main main
INFO: присваиваем лист Integers листу без типипзации
апр 19, 2019 1:10:14 AM generics.Main main
INFO: присваиваем лист без типипзации листу строк
апр 19, 2019 1:10:14 AM generics.Main main
WARNING: добавляем строку "бла бла" в наш переприсвоенный лист, возможна ошибка
апр 19, 2019 1:10:14 AM generics.Main main
WARNING: добавляем строку "бла 23" в наш переприсвоенный лист, возможна ошибка
апр 19, 2019 1:10:14 AM generics.Main main
WARNING: добавляем строку "бла 34" в наш переприсвоенный лист, возможна ошибка
апр 19, 2019 1:10:14 AM generics.Main main
INFO: выводим все элементы листа с типизацией Integers в консоль
апр 19, 2019 1:10:14 AM generics.Main main
INFO: Размер equals 3
апр 19, 2019 1:10:14 AM generics.Main main
INFO: Получим первый элемент
апр 19, 2019 1:10:14 AM generics.Main main
WARNING: что-то пошло не так
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
	at generics.Main.main(Main.java:45)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Bu ýerde belliklere ünsi jemlemek isleýärin:
апр 19, 2019 1:10:14 AM generics.Main main
INFO: Размер equals 3
апр 19, 2019 1:10:14 AM generics.Main main
INFO: Получим первый элемент
Bu ýazgy gaty peýdasyz we maglumat beriji däl. Erroralňyşlyk ýazgysy ýaly:
WARNING: что-то пошло не так
Muny ýazmaly dälsiňiz: bu gündeligiň hatyrasyna bir ýazgy, ol diňe ýoldan çykar. Elmydama manyly zatlar ýazmaga synanyşyň. System.out.printlnMuny ulanmagy bes etmek we ulular oýnawaçlaryna geçmek ýeterlikdir diýip pikir edýärin . Munuň java.util.loggingkemçilikleri bar. Mysal üçin, ýokarda beýan eden derejelerim bärde däl, ýöne iň köp ulanylýan ýazgylarda. Bu makala üçin saýladym, java.util.loggingsebäbi baglanyşyk bilen goşmaça manipulýasiýa talap etmeýär. Şeýle hem bu ýerde eýýäm peýda bolan kemçilikleriň biriniň LOGGER.infoýerine ulanyp boljakdygyny belläp geçerin : - size habar we obýekt ibermäge mümkinçilik berýär , ýazgyçynyň özi ony owadan ýazar. Şol bir wagtyň özünde diňe habar alýar, ýagny Kadadan çykma mümkin däl, ony özüňiz bir setire terjime etmeli. Bu mysal Java ýazgylary bilen tanyşmak üçin ýeterlikdir diýip umyt edýärin. Soňra beýleki ýazgyçylary (log4j, slf4j, Logback ...) birikdirip bilersiňiz - olaryň köpüsi bar, ýöne manysy birmeňzeş ^ hereketleriň taryhyny ýazmak üçin. Resmi sapakLOGGER.log(Level.INFO...LOGGER.log(Level.WARNING,"что-то пошло не так" , e);ExceptionLOGGER.warning("");
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION