1.1 Логдор менен таанышуу
Лог – бул болгон окуялардын тизмеги. Дал кеме журналы же күндөлүк сыяктуу. Ал эми логгер — бул лог жүргүзүүгө жардам бере турган объект. Программалоодо дээрлик бардыгын лог кылуу кабыл алынган. Ал эми Java'да – бул баарын, ал тургай бир аз көбүрөөк лог кылуу.

Маселе, Java программалары көбүнчө UI, консоль жана башка нерселерсиз чоң сервердик тиркемелер болуп саналат. Алар бир эле учурда миңдеген колдонуучулардын өтүнмөлөрүн иштеп чыгат жана көп учурда ушул учурда ар кандай катачылыктар жаралат. Айрыкча, бир нече жиптер бири-бирине тоскоол боло баштаганда.
Жана, чындыгында, мындай кырдаалда сейрек жаралган катачылыктарды жана мүчүлүштүктөрдү табуунун бирден-бир жолу бул лог/файлга баарын жазуу, бул ар бир жипте эмне болуп жаткандыгын жазуу.
Көпчүлүк учурда логдо методдун параметрлери жөнүндө маалымат, аны менен чакырылган, бардык кармалган каталар жана дагы көптөгөн орточо маалыматтар жазылат. Лог канчалык толук болсо, окуялардын ырааттуулугун калыбына келтирип, мүчүлүштүктүн же катачылыктын себептерин аныктоо ошончолук жеңил болот.
Бирок лог канчалык чоң болсо, аны менен иштөө ошончолук кыйын болот. Кээде суткасына бир нече гигабайт логдорго жетет. Бул нормалдуу көрүнүш.
1.2 Ийгиликсиз логдор
Биринчи логдор катары иштеп чыгуучулар жөн гана консолго чыгарууларды колдонушкан. Бул тиркемени дебаг кылуу учурунда ыңгайлуу – консолго бардык маанилүү маалыматтар жана өзгөрмөлөрдүн маанилери жазылат. Бирок мындай лог кадимки тиркеменин ишинде таптакыр колдонууга жатпайт.
Алгач, тиркеме өзү консолго бир нерсе чыгаргысы келиши мүмкүн жана колдонуучу программист үчүн арналган кызматтык маалыматты көргүсү келбейт.
Экинчиден, консолдун буферинин көлөмү чектелүү, көп нерсе жазылбайт.
Акырында, үчүнчүдөн, программанын каталары туурасында маалымат, ал көп убакыттан бери топтолот, программанын иштеп чыгуучуларына жөнөтүлүшү керек. Жана бул маалыматты дароо файлга жазуу эң ыңгайлуу.
Биринчи маселени иштеп чыгуучулар тез чечишти – дагы бир чыгаруу агымын ойлоп табышты – System.err
. Сиз ага билдирүүлөрдү жазсаңыз болот жана алар өзүнчө агымга жөнөтүлөт, стандарттык консолго эмес.
Жана файлга жазуу маселесин да чечүүгө мүмкүн болду:
// Биз лог жазуучу файлды аныктайбыз
System.setErr(new PrintStream(new File("log.txt")));
// Билдирүүлөрдү чыгарабыз
System.err.println("Сообщение 1");
System.err.println("Сообщение 2");
// Каталык тууралуу билдирүү чыгарабыз
try {
throw new Exception("Сообщение об ошибке");
} catch (Exception e) {
e.printStackTrace();
}
Бирок бул түрдө да, бул бүт маселени чече алган жок, ошондуктан лог билдирүүлөрүн файлга жазуучу атайын китепкана түзүү чечими кабыл алынган. Ал акылдуу иштеп, логдоп жаткан окуяларды жана маалыматтарды фильтрлөөнү ийкемдүү жөндөөгө мүмкүнчүлүк берген.
Лог жүргүзүү процессинин өзү, негизинен, үч бөлүктөн турат:
- Биринчи бөлүк – бул маалыматтарды жыйноо.
- Экинчи бөлүк – бул жыйналган маалыматтарды фильтрлөөнү.
- Үчүнчү бөлүк – бул тандалган маалыматтарды жазуу.
1.3 log4j логгер менен таанышуу
Java коомчулугунда биринчи популярдуу логгер болуп log4j
логгери эсептелген. Аны долбоорго кошуу абдан оңой, бул үчүн pom.xml файлыңызга бир нече саптарды кошуу керек
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>2.2.17</version>
</dependency>
Твоя программа менен мындай логгердин өз ара аракеттенүүсү болжол менен мындай болмок:
class Manager {
private static final Logger logger = LoggerFactory.getLogger(Manager.class);
public boolean processTask(Task task) {
logger.debug("processTask id = " + task.getId());
try {
task.start();
task.progress();
task.complete();
return true;
} catch (Exception e) {
logger.error("Unknown error", e);
return false;
}
}
}
Бул жерде үч нерсе болуп жатат:
Жашыл түс менен объектти түзүү белгиленген Logger
. Анын объекти статикалык өзгөрмөдө сакталат, анткени анын менен кийинки иште ыңгайсыздык жок болсун. Ошондой эле getLogger()
методунда маалымат класска берилет, бул маалыматтар чогултулган жерде.
Көк түс менен логдоочу маалыматтын мааниси дебаг учурунда гана белгиленген. Бул үчүн атайын метод колдонулат – debug()
Акырында кызыл түс менен логдо пайда болгон өзгөчөлүктү сактоо сап белгиленген. Өзгөчөлүктөр – бул потенциалдуу каталар, ошондуктан логдоо үчүн error()
методу колдонулат.
GO TO FULL VERSION