"Нимаи хайр, имрӯз дар сайти саноатӣ ҳодиса ба қайд гирифта шуд, ман аз таҳиягар хоҳиш мекунам, ки ба гурӯҳи таҳлилӣ ҳамроҳ шавад." Яке аз рӯзҳои коратон метавонад чунин чизеро оғоз кунад, ё ин ки субҳ бошад - муҳим нест. Аммо биёед аз аввал сар кунем. Бо ҳалли мушкилот дар ин ҷо дар JavaRush, шумо навиштани codeеро меомӯзед, ки кор мекунад ва он чизеро, ки аз он интизор аст, иҷро мекунад. Агар шумо ба бахши кӯмак нигаред , маълум аст, ки ин на ҳама вақт бори аввал кор мекунад. Дар кор хам хамин тавр мешавад. Шумо на ҳамеша мушкилотро бори аввал ҳал мекунед: хатоҳо шарикони абадии мо мебошанд. Муҳим аст, ки шумо метавонед рӯйдодҳои хатогиро барқарор кунед. Биёед бо як мисол оғоз кунем. Биёед тасаввур кунем, ки шумо полис ҳастед. Шуморо ба ҷои ҳодиса даъват карданд (шиша дар мағоза шикаста буд), шумо омадед ва онҳо аз шумо дар бораи ҳодиса интизоранд. Аз куҷо сар кардан? Ман намедонам, ки полис чӣ гуна кор мекунад. Хеле шартӣ - онҳо ба ҷустуҷӯи шоҳидон, далелҳо ва ҳама чизҳо шурӯъ мекунанд. Чӣ мешавад, агар худи макон ба шумо муфассал нақл кунад, ки чӣ рӯй дод? Масалан, ба ин монанд:
- 21:59 соҳиби ҳушдорро даргиронд (5 дақиқа то пурра фаъол шудан)
- 22:00 соҳиби дарро баста
- 22:05 фаъолсозии пурраи ҳушдор
- 22:06 соҳиби дастаки кашид
- 23:15 сенсори садо фаъол шуд
- 23:15 Як даста сагҳо давида, бо овози баланд аккос заданд
- 23:15 сенсори садо хомӯш
- 01:17 сенсори зарба дар шишаи берунии дисплей фаъол шуд
- 01:17 кабӯтаре ба шиша парвоз кард
- 01:17 шиша шикаст
- 01:17 сирена фаъол аст
- 01:17 кабутар худро чунбонда, парвоз кард
java.util.Logger
: ин барои шиносоӣ бо ҳамдигар кофӣ аст. Ҳар як сабти гузориш дорои санаи вақт, сатҳи рӯйдодҳо, паёмҳо мебошад. Сана ва вақт ба таври худкор ворид карда мешаванд. Сатҳи ҳодиса аз ҷониби муаллифи паём интихоб карда мешавад. Якчанд сатҳҳо вуҷуд доранд. Асосҳо инҳоянд: маълумот, ислоҳ, хато.
- INFO - одатан инҳо паёмҳои иттилоотӣ дар бораи рӯйдодҳо мебошанд, чизе ба монанди таърих аз рӯи сана: 1915 - чизе рӯй дод, 1916 - чизи дигар.
- DEBUG - воқеаҳои як лаҳзаи мушаххасро муфассалтар тасвир мекунад. Масалан, тафсилоти ҷанг дар таърих дар сатҳи ислоҳ аст." Командир Такойтович бо артиши худ ба сӯи деҳаи Селовича пеш рафт ."
- ERROR - хатогиҳое, ки рух медиҳанд, одатан дар ин ҷо навишта мешаванд. Эҳтимол шумо пай бурдаед, ки вақте ки шумо чизеро печонед
try-catch
, блокcatch
боe.printStacktrace()
. Он танҳо вурудро ба консол мебарорад. Бо истифода аз як сабткунанда, шумо метавонед ин сабтро ба қайдгир фиристед (ҳаха), шумо идеяро пайдо мекунед. - Огоҳӣ - огоҳиҳо дар ин ҷо навишта шудаанд. Масалан, чароғи аз ҳад зиёд гарм шудани мошин. Ин танҳо як огоҳӣ аст ва беҳтар аст, ки чизеро тағир диҳед, аммо ин вайроншавӣ нест. Вақте ки мошин вайрон мешавад, мо бо сатҳи ERROR ворид мешавем.
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
Дар ин ҳолат, ҳама чиз танзим карда мешавад, ки сабткунанда дар як вақт ба файл ва ба консол менависад. Дар он сурат? агар чизе дар консол тоза карда шавад, инчунин ҷустуҷӯ аз рӯи файл осонтар аст. Сатҳи INFO барои ҳарду. Намунаи ном низ барои файл муайян карда шудааст. Ин конфигуратсияи ҳадди аққалест, ки ба шумо имкон медиҳад, ки якбора ҳам ба консол ва ҳам файл нависед. java.util.logging.FileHandler.append
ба true муқаррар кунед , то вурудоти кӯҳна дар файл тоза карда нашавад. Намунаи истифода ин аст (бидуни шарҳҳо, қайдгиранда дар бораи худ шарҳ медиҳад):
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);
}
}
}
Ин беҳтарин намуна нест, ман намунаеро гирифтам, ки дар даст буд. Намунаи баромад:
апр 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)
Дар ин ҷо ман мехоҳам ба қайдҳо диққат диҳам:
апр 19, 2019 1:10:14 AM generics.Main main
INFO: Размер equals 3
апр 19, 2019 1:10:14 AM generics.Main main
INFO: Получим первый элемент
Ин вуруд комилан бефоида ва иттилоотӣ нест. Мисли вуруди хато:
WARNING: что-то пошло не так
Шумо набояд инро нависед: ин як чӯб ба хотири як чӯб аст, он танҳо дар роҳ мешавад. Кӯшиш кунед, ки ҳамеша чизҳои пурмазмун нависед. System.out.println
Ман фикр мекунам, ки ин барои қатъ кардани истифодаи он ва гузаштан ба бозичаҳои калонсолон кофӣ аст . Он java.util.logging
камбудиҳо дорад. Масалан, сатҳҳое, ки ман дар боло тавсиф кардам, дар ин ҷо нестанд, аммо онҳо дар логгерҳои бештар истифодашаванда ҳастанд. Ман онро барои ин мақола интихоб кардам, java.util.logging
зеро он бо пайвастшавӣ ба манипуляцияҳои иловагӣ ниёз надорад. Ман инчунин қайд мекунам, ки онро LOGGER.info
ба ҷои истифода бурдан мумкин аст LOGGER.log(Level.INFO...
Яке аз нуқсонҳои аллакай дар ин ҷо пайдошуда: LOGGER.log(Level.WARNING,"что-то пошло не так" , e);
- он ба шумо имкон медиҳад, ки паём ва an objectро интиқол диҳед Exception
, худи сабтгоҳҳ онро зебо менависад. Дар айни замон, LOGGER.warning("");
он танҳо паём қабул мекунад, яъне. Истисноро гузаронидан мумкин нест, шумо бояд онро худатон ба сатр тарҷума кунед. Умедворам, ки ин мисол барои шиносоӣ бо сабти Java кофист. Пас шумо метавонед логгерҳои дигарро (log4j, slf4j, Logback...) пайваст кунед - онҳо бисёранд, аммо моҳият як аст^ барои сабти таърихи амалҳо. Дастури расмӣ
GO TO FULL VERSION