3.1 घटना स्तरों की सूची

लॉगिंग प्रोग्राम चलने के दौरान होने वाली किसी भी घटना को रिकॉर्ड करने की प्रक्रिया है। एक प्रोग्रामर के रूप में आपका कर्तव्य है record everything importantक्योंकि तब, जब productionअजीब और / या गंभीर त्रुटियाँ होती हैं, तो आपके पास इन लॉग्स के अलावा और कुछ नहीं होगा।

यदि आपके पास इसके बारे में और कॉल के पूरे इतिहास के बारे में सारी जानकारी है तो कोई भी त्रुटि कई गुना तेजी से समाप्त हो जाएगी। लेकिन यहाँ से एक सरल निष्कर्ष निकलता है - सब कुछ सामान्य रूप से लॉग करने के लिए: सभी विधियों के कॉल, सभी मापदंडों के मान।

यह भी कोई विकल्प नहीं है - बहुत अधिक जानकारी उतनी ही बुरी है जितनी बहुत कम। हमें स्मार्ट लॉगिंग की जरूरत है। मनुष्य द्वारा मनुष्य के लिए बनाया गया। और यहाँ हम लॉगिंग के बारे में पहले तथ्य पर आते हैं - लॉग में सभी प्रविष्टियाँ उनके निर्माण के समय भी श्रेणियों में विभाजित होती हैं।

घटना स्तरों की सूची

प्रोग्रामर, लॉग में एक घटना लिखते समय, खुद के लिए तय करना चाहिए कि यह जानकारी कितनी महत्वपूर्ण है। घटना की गंभीरता का स्तर संदेश के लेखक द्वारा चुना जाता है। लॉग सूचना महत्व के 5 स्तर हैं log4j:

  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL

नीचे हम उनके बारे में और विस्तार से बताएंगे।

3.2 डिबग

स्तर को 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

जावा अनुप्रयोगों में, घटनाएँ अक्सर उठाए गए अपवादों से जुड़ी होती 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, डेटा को सिंक्रनाइज़ करना, वितरित लेनदेन से संबंधित सब कुछ। मुझे लगता है कि शुरुआत के लिए इतना काफी है। आप भविष्य में इस सूची में जोड़ देंगे।