3.1 इव्हेंट स्तरांची सूची
लॉगिंग ही प्रोग्राम चालू असताना घडणाऱ्या कोणत्याही घटना रेकॉर्ड करण्याची प्रक्रिया आहे. प्रोग्रामर म्हणून तुमचे कर्तव्य आहे record everything important
कारण, जेव्हा production
विचित्र आणि/किंवा गंभीर त्रुटी असतील, तेव्हा तुमच्याकडे या नोंदींशिवाय दुसरे काहीही नसेल.
तुमच्याकडे त्याबद्दल आणि कॉलच्या सर्व इतिहासाविषयी सर्व माहिती असल्यास कोणतीही त्रुटी अनेक पटीने वेगाने दूर केली जाईल. परंतु येथून एक साधा निष्कर्ष निघतो - सर्वसाधारणपणे सर्वकाही लॉग करण्यासाठी: सर्व पद्धतींचे कॉल, सर्व पॅरामीटर्सची मूल्ये.
हा देखील पर्याय नाही - खूप जास्त माहिती जितकी कमी तितकीच वाईट आहे. आम्हाला स्मार्ट लॉगिंग आवश्यक आहे. माणसाने माणसासाठी बनवलेले. आणि येथे आम्ही लॉगिंगबद्दल प्रथम तथ्याकडे आलो - लॉगमधील सर्व नोंदी त्यांच्या निर्मितीच्या वेळी देखील श्रेणींमध्ये विभागल्या जातात.

प्रोग्रामर, लॉगवर इव्हेंट लिहित असताना, ही माहिती किती महत्त्वाची आहे हे स्वतःच ठरवले पाहिजे. इव्हेंटची तीव्रता पातळी संदेशाच्या लेखकाद्वारे निवडली जाते. log4j
लॉग केलेल्या माहितीच्या महत्त्वाच्या 5 स्तर आहेत :
DEBUG
INFO
WARN
ERROR
FATAL
खाली आम्ही त्यांच्याबद्दल अधिक तपशीलवार सांगू.
३.२ डीबग
पातळी DEBUG
सर्वात कमी महत्त्वाची मानली जाते. या पातळीच्या महत्त्वासह लॉगवर लिहिलेली माहिती केवळ अनुप्रयोग डीबगिंग दरम्यान आवश्यक आहे. डीबगिंग दरम्यान आवश्यक माहिती लॉग करण्यासाठी, पद्धत वापरली जाते debug()
.
उदाहरण:
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;
}
}
}
लक्ष द्या, पद्धत debug
पद्धतच्या अगदी सुरुवातीस आहे (पद्धतीला अद्याप काहीही करण्याची वेळ नाही) आणि लॉगमध्ये मेथडला पास केलेल्या व्हेरिएबलचे मूल्य लिहिते. या पद्धतीसाठी हे सर्वात सामान्य वापर प्रकरण आहे debug()
.
3.3 माहिती आणि चेतावणी
पुढील दोन स्तर आहेत INFO
आणि WARN
. त्यांच्यासाठी दोन पद्धती आहेत - info()
आणि warn()
.
पातळी INFO
फक्त माहितीपूर्ण संदेशांसाठी वापरली जाते: हे आणि ते घडते. जेव्हा तुम्ही लॉगमधील त्रुटीचे विश्लेषण करण्यास प्रारंभ करता, तेव्हा त्याची पार्श्वभूमी वाचणे खूप उपयुक्त ठरू शकते. यासाठी ही पद्धत योग्य आहे info()
.
चेतावणी लिहिण्यासाठी पातळी वापरली जाते ( चेतावणीWARN
शब्दावरून ). सहसा, या पातळीच्या महत्त्वासह, माहिती लिहिली जाते की काहीतरी चूक झाली आहे, परंतु या परिस्थितीत काय करावे हे प्रोग्रामला माहित आहे.
उदाहरणार्थ, डिस्कवर फाइल लिहिण्याच्या प्रक्रियेत, अशी फाइल आधीपासूनच अस्तित्वात असल्याचे दिसून आले. येथे प्रोग्राम एक चेतावणी (चेतावणी) लॉग करू शकतो, परंतु वापरकर्त्यास एक डायलॉग बॉक्स दर्शवू शकतो आणि भिन्न फाइल नाव निवडण्याची ऑफर देतो.
उदाहरण:
class FileManager {
private static final Logger logger = LoggerFactory.getLogger(FileManager.class);
public boolean saveFile(FileData file) {
logger.info(“save the file ” + file.getName());
boolean resultOK = SaveUtils.save(file);
if (resultOK) return true;
logger.warn(“file writing problem ” + file.getName());
String filename = Dialog.selectFile();
boolean result = SaveUtils.save(file, filename);
return result;
}
3.4 त्रुटी आणि घातक
शेवटी, दोन सर्वात महत्वाचे लॉगिंग स्तर आहेत ERROR
आणि FATAL
. त्यांच्यासाठी, समान नावांसह विशेष पद्धती देखील आहेत: error()
आणि fatal()
.
त्यांनी त्रुटींना दोन श्रेणींमध्ये विभागण्याचा निर्णय घेतला - सामान्य चुका आणि घातक चुका . एक घातक त्रुटी बहुतेक वेळा ऍप्लिकेशन क्रॅश (डेस्कटॉप ऍप्लिकेशन्ससाठी) किंवा वेब सर्व्हिस क्रॅश (वेब ऍप्लिकेशन्ससाठी) मध्ये परिणाम करते.
दुसरे चांगले उदाहरण म्हणजे विंडोज ऑपरेटिंग सिस्टम. जर तुमचा प्रोग्राम नुकताच क्रॅश झाला असेल, तर ऑपरेटिंग सिस्टमच्या दृष्टिकोनातून, हे आहे Error
. आणि जर ऑपरेटिंग सिस्टम स्वतःच पडली असेल आणि तुम्हाला विंडोज ब्लू स्क्रीन ऑफ डेथ दिसली तर हे आधीच आहे Fatal error
.
Java ऍप्लिकेशन्समध्ये, इव्हेंट्स बहुतेकदा उठलेल्या अपवादांशी संबंधित Error
असतात . Fatal
उदाहरण:
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;
}
}
}
3.5 काय लॉग करावे
अर्थात, सर्वकाही एका ओळीत लॉग करणे योग्य नाही. बहुतेक प्रकरणांमध्ये, हे लॉगची वाचनीयता तीव्रतेने बिघडते आणि सर्व केल्यानंतर, लॉग वाचण्यासाठी प्रथम ठिकाणी लिहिले जाते.
याव्यतिरिक्त, आपण लॉगवर विविध वैयक्तिक आणि आर्थिक माहिती लिहू शकत नाही. आता हे काटेकोरपणे आणि सहजतेने तुम्ही दंड किंवा खटला भरू शकता. लवकरच किंवा नंतर, असा लॉग बाजूला गळती होईल आणि नंतर कोणतीही समस्या येणार नाही.
मग काय लॉग केले पाहिजे?
प्रथम, आपल्याला अनुप्रयोगाची सुरूवात लॉग इन करणे आवश्यक आहे . अनुप्रयोग सुरू झाल्यानंतर, त्याच्या ऑपरेशन मोड आणि विविध महत्त्वाच्या सेटिंग्ज लॉग करण्याची शिफारस केली जाते - यामुळे भविष्यात लॉग वाचणे सोपे होईल.
दुसरे म्हणजे, तुमचा अनुप्रयोग ज्यासह कार्य करतो त्या सर्व तृतीय-पक्ष सेवांची स्थिती लॉग करणे आवश्यक आहे : मेलिंग सिस्टम, कोणत्याही बाह्य सेवा. कमीतकमी, ते योग्यरित्या कार्य करत आहेत याची खात्री करण्यासाठी तुम्हाला त्यांच्याशी कनेक्शनचा क्षण सुरक्षित करणे आवश्यक आहे.
तिसरे म्हणजे, सर्व अपवाद लॉग करणे आवश्यक आहे . ते अपेक्षित असल्यास, त्यांच्यावरील माहिती संक्षिप्तपणे लिहिता येईल. बग शोधताना अपवादांबद्दल संपूर्ण माहिती 50%-80% महत्वाची माहिती देते.
तुम्हाला ऍप्लिकेशन शटडाउन लॉग करणे देखील आवश्यक आहे . अनुप्रयोग सामान्यपणे समाप्त करणे आवश्यक आहे आणि लॉगमध्ये डझनभर त्रुटी टाकू नये. बर्याचदा या ठिकाणी तुम्हाला अडकलेली कामे, थ्रेड पूलमधील समस्या किंवा तात्पुरत्या फाइल्स हटवण्यात समस्या आढळू शकतात.
सुरक्षितता आणि वापरकर्ता अधिकृततेशी संबंधित प्रत्येक गोष्ट लॉग केल्याचे सुनिश्चित करा . जर एखाद्या वापरकर्त्याने सलग 10 वेळा लॉग इन करण्याचा किंवा त्यांचा पासवर्ड रीसेट करण्याचा प्रयत्न केला, तर ही माहिती लॉगमध्ये प्रतिबिंबित झाली पाहिजे.
असिंक्रोनस कार्यांबद्दल शक्य तितकी माहिती लॉग करा - अशा थ्रेड्समध्ये अपवाद अनेकदा गमावले जातात. असिंक्रोनस कार्यासाठी, त्याचा प्रारंभ आणि शेवट लॉग करणे सुनिश्चित करा. यशस्वी पूर्तता समस्याप्रधान प्रमाणेच लॉग इन केली पाहिजे.
आणखी काय? कालबद्ध कार्ये लाँच करणे, संचयित कार्ये लाँच करणे SQL-procedures
, डेटा सिंक्रोनाइझ करणे, वितरित व्यवहारांशी संबंधित सर्वकाही. मला वाटते की सुरुवातीसाठी ते पुरेसे आहे. भविष्यात तुम्ही या यादीत सामील व्हाल.
GO TO FULL VERSION