पूरा पाइथन लगिङ्ग गाइड: शुरुआतीदेखि उन्नत स्तरसम्म

目次

1. Python मा लगिङ्गको पूर्ण मार्गदर्शिका | डिबगिङ्गदेखि उत्पादनसम्म

Python मा कार्यक्रम विकास गर्दा, त्रुटिहरू पहिचान गर्न र व्यवहार प्रमाणित गर्न लगिङ्ग अत्यावश्यक हुन्छ।
यो लेखले आधारभूत अवधारणाबाट व्यावहारिक प्रविधिसम्म सबै कुरा व्याख्या गर्दछ जसले Python शुरुआतीहरूलाई प्रभावकारी रूपमा लगिङ्ग प्रयोग गर्न मद्दत गर्छ।

2. Python लगिङ्ग के हो? आधारभूत अवधारणाहरू र किन आवश्यक छ

लगिङ्ग भनेको कार्यक्रम चल्दा उत्पन्न हुने सूचना रुटिहरूलाई रेकर्ड गर्ने एक मेकानिज्म हो। उचित रूपमा लगिङ्ग प्रयोग गर्दा तलका फाइदाहरू प्राप्त हुन्छन्:

लगिङ्गका फाइदाहरू

  1. त्रुटि विश्लेषण सजिलो यसले त्रुटि कहाँ भयो र यसको कारण के हो भनेर pinpoint गर्न मद्दत गर्छ।
  2. कार्यक्रमको व्यवहार ट्र्याक गर्नु तपाईंले कुन भागहरू सही चलिरहेका छन् र कहाँ समस्या देखिन्छ हेर्न सक्नुहुन्छ।
  3. सञ्चालन निगरानी सक्षम गर्नु उत्पादनमा प्रणालीको स्वास्थ्य निरन्तर निगरानी गर्न यसको आधार प्रदान गर्छ।

print() सँगको भिन्नता

print() फङ्क्शन, जुन शुरुआतीहरूले प्रायः प्रयोग गर्छन्, डिबगिङ्गका लागि सुविधाजनक छ तर गम्भीर विकासका लागि तलका सीमितताहरू छन्:

  • आउटपुट गन्तव्यलाई लचिलो रूपमा निर्दिष्ट गर्न सकिँदैन (जस्तै, फाइलहरू वा बाह्य सेवाहरू)।
  • लग स्तर (severity level) व्यवस्थापन गर्न सकिँदैन।

यी समस्याहरूलाई Python को मानक logging मोड्युल प्रयोग गरेर समाधान गर्न सकिन्छ।

3. Python को बिल्ट‑इन logging मोड्युलसँग लगिङ्ग कसरी सुरु गर्ने

Python मा बिल्ट‑इन logging मोड्युल समावेश गरिएको छ, जसले लगहरू सजिलै आउटपुट गर्न मद्दत गर्छ। यो भागले आधारभूत प्रयोगलाई व्याख्या गर्दछ।

लग स्तरहरूको अवलोकन

logging मोड्युलले लग सन्देशको गम्भीरता जनाउन “log level” सेट गर्न अनुमति दिन्छ। मुख्य लग स्तरहरू यस्ता छन्:

  • DEBUG : डिबग जानकारी। विकासको क्रममा उपयोगी।
  • INFO : सूचना सन्देशहरू। कार्यक्रमको प्रगति देखाउँछ।
  • WARNING : चेतावनीहरू। सम्भावित समस्याहरू देखाउँछ।
  • ERROR : त्रुटिहरू। कार्यक्रम सही रूपमा काम नगर्दा देखाउँछ।
  • CRITICAL : गंभीर त्रुटिहरू। प्रणालीको क्र्यास देखाउँछ।

आधारभूत प्रयोग

logging मोड्युल प्रयोग गरेर लगिङ्गको एक साधारण उदाहरण तल दिइएको छ।

import logging

# Basic logging configuration
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# Example output for each log level
logging.debug('This is debug information.')
logging.info('This is an info message.')
logging.warning('This is a warning message.')
logging.error('This is an error message.')
logging.critical('This is a critical error message.')

कोड व्याख्या

  • basicConfig : लगिङ्ग आउटपुट कन्फिगर गर्छ। level आर्गुमेन्टले न्यूनतम लग स्तर सेट गर्न अनुमति दिन्छ।
  • ढाँचा निर्दिष्टीकरण : format आर्गुमेन्टले लग सन्देशको ढाँचा अनुकूलन गर्न मद्दत गर्छ।
  • उदाहरण: %(asctime)s टाइमस्ट्याम्प, %(levelname)s लग स्तर, र %(message)s सन्देशको सामग्री दर्शाउँछ।

4. Python मा लगहरू फाइल र कन्सोलमा कसरी आउटपुट गर्ने

लगहरू स्क्रिनमा मात्र होइन, फाइलहरू वा बाह्य प्रणालीहरूमा पनि बचत गर्न सकिन्छ। यो भागले विभिन्न आउटपुट गन्तव्यहरू कसरी कन्फिगर गर्ने बताउँछ।

कन्सोलमा लगिङ्ग

logging मोड्युलको डिफ़ॉल्ट सेटिङले लगहरू कन्सोलमा आउटपुट गर्छ।

import logging

logging.basicConfig(level=logging.INFO)
logging.info('Example of logging to the console')

फाइलमा लगिङ्ग

फाइलमा लगहरू रेकर्ड गर्न, basicConfig को filename आर्गुमेन्ट निर्दिष्ट गर्नुहोस्।

import logging

logging.basicConfig(filename='app.log', level=logging.INFO, format='%(asctime)s - %(message)s')
logging.info('This is an example of logging to a file.')

कन्सोल र फाइल दुवैमा लगिङ्ग

बहु आउटपुट गन्तव्य कन्फिगर गर्दा, logging का ह्यान्डलरहरू प्रयोग गर्नुहोस्।

import logging

# Create a logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

# Console handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# File handler
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)

# ह्यान्डलर ढाँचा कन्फिगर गर्नुहोस्
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# लगरमा ह्यान्डलरहरू थप्नुहोस्
logger.addHandler(console_handler)
logger.addHandler(file_handler)

logger.info('Example log that will be output to both the console and the file.')

5. Python परियोजनाहरूमा प्रभावकारी लगिङ प्रविधिहरू

यो खण्डले वास्तविक-विश्व परियोजनाहरूमा उपयोगी लगिङका सर्वोत्तम अभ्यासहरू प्रस्तुत गर्दछ। प्रभावकारी डिबगिङ प्रविधिहरू सिक्नुहोस् र लग व्यवस्थापन सुधार्नुहोस्।

निरन्तर लगिङ कन्फिगरेसन

ठूलो-स्तरका परियोजनाहरूमा, निरन्तर लगिङ कन्फिगरेसन महत्त्वपूर्ण हुन्छ। जब धेरै मोड्युलहरू वा टोलीका सदस्यहरू सहकार्य गर्छन्, एकीकृत ढाँचा र लग स्तरहरू सेट गर्दा विश्लेषण र समस्या समाधान सजिलो हुन्छ। तल निरन्तर लगिङ कन्फिगरेसनको एउटा उदाहरण छ।

import logging

# Common logging configuration function
def setup_logger(name, log_file, level=logging.INFO):
    handler = logging.FileHandler(log_file)
    handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))

    logger = logging.getLogger(name)
    logger.setLevel(level)
    logger.addHandler(handler)
    return logger

# Create loggers for each module
app_logger = setup_logger('app_logger', 'app.log')
db_logger = setup_logger('db_logger', 'db.log')

# Example of log output
app_logger.info('Application log message')
db_logger.error('Database error message')

त्रुटि ह्यान्डलिङ र लगिङको संयोजन

त्रुटि ह्यान्डलिङ (अपवाद ह्यान्डलिङ) मा, जानकारीलाई सही तरिकाले लग गर्दा समस्याको विवरण छिटो बुझ्न सकिन्छ। तल अपवाद उत्पन्न हुँदा लगिङको एउटा उदाहरण छ।

import logging

logging.basicConfig(filename='error.log', level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')

try:
    # Example code that raises an error
    1 / 0
except ZeroDivisionError as e:
    logging.error(f'A division-by-zero error occurred: {e}')

लग सन्देशहरूमा सन्दर्भ जानकारी समावेश गर्नु

परियोजनाको आधारमा, लग सन्देशहरूमा अतिरिक्त सन्दर्भ जानकारी (जस्तै, प्रयोगकर्ता आईडी, लेनदेन आईडी) समावेश गर्दा थप विस्तृत विश्लेषण सम्भव हुन्छ।

import logging

logging.basicConfig(filename='context.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

user_id = 12345
transaction_id = 'txn_001'

logging.info(f'User ID: {user_id}, Transaction ID: {transaction_id} - Operation succeeded.')

उचित लग फिल्टरिङ

जब धेरै मात्रा मा लगहरू उत्पन्न हुन्छन्, आवश्यक लग मात्र आउटपुट गर्न फिल्टरिङ प्रयोग गर्नु प्रभावकारी हुन्छ। तल कस्टम फिल्टरको एउटा उदाहरण छ।

import logging

class DebugFilter(logging.Filter):
    def filter(self, record):
        return record.levelno == logging.DEBUG

logger = logging.getLogger('filtered_logger')
handler = logging.StreamHandler()
handler.addFilter(DebugFilter())

logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

logger.debug('This is a debug log.')
logger.info('This will not be displayed.')

6. Python लगिङ सुधार्नका लागि सिफारिस गरिएका तीन लाइब्रेरीहरू

Python को बिल्ट‑इन logging मोड्युलको अतिरिक्त, केही उपयोगी लगिङ लाइब्रेरीहरू पनि छन्। यो खण्डले विशेष गरी लोकप्रिय तीनवटा लाइब्रेरीहरूलाई उजागर गर्दछ।

Loguru: शुरुआतीहरूका लागि सरल लगिङ लाइब्रेरी

विशेषताहरू:

  • सजिलो इन्स्टलेशन र सेटअप।
  • मानक logging भन्दा अधिक सहज सिन्ट्याक्स।

इन्स्टलेशन:

pip install loguru

मूल प्रयोग:

from loguru import logger

logger.info('This is log output using Loguru.')
logger.error('Error messages can be logged easily, too.')

Logzero: हल्का, प्रयोग गर्न सजिलो लगिङ लाइब्रेरी

विशेषताहरू:

  • सजिलै अनुकूलन गर्न सकिने।
  • निर्मित लग घुमाउने सुविधा।

स्थापना:

pip install logzero

मूल प्रयोग:

from logzero import logger

logger.info('Log output using Logzero')
logger.warning('This is a warning message.')

Structlog: संरचित लगिङको लागि विशेषीकृत लाइब्रेरी

विशेषताहरू:

  • सजिलै JSON ढाँचामा लगहरू आउटपुट गर्छ।
  • वितरित प्रणालीहरू र क्लाउड वातावरणका लागि उपयुक्त।

स्थापना:

pip install structlog

मूल प्रयोग:

import structlog

logger = structlog.get_logger()
logger.info('event', user='12345', action='login')

७. Python लगिङ सम्बन्धी प्रश्नहरू समाधान गर्दै!

प्रश्न १. लगहरू किन आउटपुट हुँदैनन्?

उत्तर: लग स्तर सही रूपमा सेट गरिएको छ कि छैन जाँच गर्नुहोस्। डिफल्ट रूपमा, केवल WARNING स्तर वा सोभन्दा माथिको लगहरू मात्र आउटपुट हुन्छन्।

प्रश्न २. लग फाइल धेरै ठूलो भए के गर्ने?

उत्तर: जब लग फाइल निश्चित आकारमा पुग्छ, तब RotatingFileHandler प्रयोग गरेर फाइल घुमाउन सकिन्छ।

प्रश्न ३. तेस्रो पक्षको लाइब्रेरीहरू कसरी चयन गर्ने?

उत्तर: आफ्नो परियोजनाको आकार र आवश्यकताहरूको आधारमा चयन गर्नुहोस्। साना परियोजनाहरूको लागि Loguru उपयुक्त छ; यदि तपाईंलाई संरचित लगिङ चाहिन्छ भने Structlog अधिक उपयुक्त हुन्छ।

८. विकास कार्यक्षमता बढाउन Python लगिङमा निपुण बनौं

यो लेखले Python मा लगिङको आधारभूत कुराहरूदेखि उन्नत प्रविधिहरू र उपयोगी तेस्रो पक्षको लाइब्रेरीहरू सम्म सबै कुरा समेटेको छ। उचित लगिङले डिबगिङ कार्यक्षमता र प्रणाली निगरानीको शुद्धता उल्लेखनीय रूपमा सुधार्न सक्छ। आजै प्रयास गरेर हेर्नुहोस्!

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール