CherryPy তে Logging এবং Error Handling ব্যবস্থাপনা অ্যাপ্লিকেশন ডেভেলপমেন্টে অত্যন্ত গুরুত্বপূর্ণ। Logging এর মাধ্যমে আপনি অ্যাপ্লিকেশনের কার্যকলাপ ট্র্যাক করতে পারেন এবং Error Handling এর মাধ্যমে সিস্টেমের ত্রুটিগুলি সঠিকভাবে পরিচালনা করতে পারেন। CherryPy এ এই দুটি ফিচার খুবই সহজভাবে কনফিগার করা যায়।
CherryPy তে Logging
CherryPy একটি শক্তিশালী লগিং সিস্টেম সরবরাহ করে, যা আপনাকে অ্যাপ্লিকেশনের অ্যাক্সেস এবং ত্রুটি লগিং পরিচালনা করতে সাহায্য করে। এটি Python এর স্ট্যান্ডার্ড logging লাইব্রেরি ব্যবহার করে।
CherryPy তে লগিং সক্রিয় করা
CherryPy তে লগিং ব্যবস্থাপনা সক্ষম করতে cherrypy.config.update() বা কনফিগারেশন ফাইল ব্যবহার করা হয়।
উদাহরণ: CherryPy তে লগিং কনফিগারেশন
import cherrypy
import logging
class LoggingExample:
@cherrypy.expose
def index(self):
cherrypy.log("এটি একটি ইনডেক্স পেজ রিকোয়েস্ট", level=logging.INFO)
return "লগিং উদাহরণ"
@cherrypy.expose
def about(self):
cherrypy.log("এটি একটি অ্যাবাউট পেজ রিকোয়েস্ট", level=logging.INFO)
return "এটি আমাদের সম্পর্কে পেজ।"
if __name__ == '__main__':
cherrypy.config.update({
'log.access_file': 'logs/access.log', # অ্যাক্সেস লগ ফাইল
'log.error_file': 'logs/error.log', # ত্রুটি লগ ফাইল
'log.screen': True, # কনসোলে লগিং
'log.format': '%(asctime)s %(levelname)s %(message)s', # লগ ফরম্যাট
})
cherrypy.quickstart(LoggingExample())
এখানে:
cherrypy.log()ফাংশনটি লগ তথ্য সরবরাহ করে এবং বিভিন্ন লগ স্তর (level) ব্যবহার করা যায় যেমন INFO, ERROR, WARNING, ইত্যাদি।log.access_fileএবংlog.error_fileকনফিগারেশন ব্যবহার করে অ্যাক্সেস এবং ত্রুটি লগ ফাইলের লোকেশন নির্ধারণ করা হয়।log.screen: কনসোলে লগ দেখতে হলে সেটিTrueকরতে হবে।
লগ স্তর (Log Levels):
- DEBUG: ডিবাগging তথ্য।
- INFO: সাধারণ কার্যকলাপের তথ্য।
- WARNING: সতর্কতা, যা ভবিষ্যতে সমস্যা হতে পারে।
- ERROR: ত্রুটি, যা কোডের অস্বাভাবিক আচরণ নির্দেশ করে।
- CRITICAL: গুরুতর ত্রুটি যা অ্যাপ্লিকেশনটি ক্র্যাশ করতে পারে।
CherryPy তে Error Handling
CherryPy তে ত্রুটি পরিচালনার জন্য বিভিন্ন পদ্ধতি রয়েছে। আপনি tools ব্যবহার করে নির্দিষ্ট রাউটের জন্য কাস্টম ত্রুটি পৃষ্ঠা নির্ধারণ করতে পারেন অথবা কাস্টম ত্রুটি হ্যান্ডলার তৈরি করতে পারেন।
উদাহরণ: ত্রুটি হ্যান্ডলার কনফিগারেশন
import cherrypy
class ErrorHandlingExample:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
@cherrypy.expose
def error(self):
# এই মেথডে কোনো ত্রুটি ইচ্ছাকৃতভাবে সৃষ্টি করা হচ্ছে
raise cherrypy.HTTPError(404, "এই পৃষ্ঠাটি পাওয়া যায়নি!")
@cherrypy.expose
def notfound(self, *args, **kwargs):
return "এটি একটি কাস্টম 404 ত্রুটি পৃষ্ঠা!"
if __name__ == '__main__':
cherrypy.config.update({
'tools.staticdir.on': True,
'tools.staticdir.dir': './static',
})
# কাস্টম 404 ত্রুটি পৃষ্ঠা সেট করা
cherrypy.tree.mount(ErrorHandlingExample(), '/', {
'/': {
'request.error_page': '/notfound'
}
})
cherrypy.quickstart(ErrorHandlingExample())
এখানে:
error()মেথডে ইচ্ছাকৃতভাবে একটি ত্রুটি তৈরি করা হয়েছে (404ত্রুটি)।notfound()মেথডটি কাস্টম 404 পৃষ্ঠা হিসেবে ব্যবহার করা হয়েছে।request.error_pageকনফিগারেশন দিয়ে আপনি অ্যাপ্লিকেশনে কাস্টম ত্রুটি পৃষ্ঠা নির্ধারণ করতে পারেন।
কাস্টম ত্রুটি হ্যান্ডলার তৈরি করা
CherryPy তে আপনি কাস্টম ত্রুটি হ্যান্ডলার তৈরি করতে পারেন, যা নির্দিষ্ট ত্রুটি ধরলে একটি নির্দিষ্ট আচরণ প্রয়োগ করবে।
উদাহরণ: কাস্টম ত্রুটি হ্যান্ডলার
import cherrypy
class CustomErrorHandler:
def handle_404(self):
return "এই পৃষ্ঠাটি পাওয়া যায়নি!"
def handle_500(self):
return "সার্ভার ত্রুটি! অনুগ্রহ করে কিছু সময় পরে চেষ্টা করুন।"
class ErrorHandlingExample:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
@cherrypy.expose
def error(self):
raise cherrypy.HTTPError(404, "এই পৃষ্ঠাটি পাওয়া যায়নি!")
if __name__ == '__main__':
cherrypy.config.update({
'tools.sessions.on': True,
'tools.staticdir.on': True,
})
# কাস্টম ত্রুটি হ্যান্ডলার সেট করা
cherrypy.tree.mount(ErrorHandlingExample(), '/', {
'/': {
'request.error_page': '/error_handler/handle_404', # কাস্টম 404 হ্যান্ডলার
'request.error_page': '/error_handler/handle_500', # কাস্টম 500 হ্যান্ডলার
}
})
cherrypy.quickstart(ErrorHandlingExample())
এখানে:
handle_404এবংhandle_500মেথডগুলো কাস্টম ত্রুটি পৃষ্ঠা প্রদান করে।
CherryPy তে Global Error Handling
CherryPy তে একটি গ্লোবাল ত্রুটি হ্যান্ডলার কনফিগার করার জন্য error_page কনফিগারেশন ব্যবহার করা যেতে পারে। এটি সার্ভারে সমস্ত ত্রুটি হ্যান্ডল করতে সক্ষম হয় এবং আপনি সমস্ত ত্রুটির জন্য একটি সাধারণ পৃষ্ঠা তৈরি করতে পারেন।
উদাহরণ: গ্লোবাল ত্রুটি হ্যান্ডলার
import cherrypy
class GlobalErrorHandler:
def __init__(self):
self.error = "সার্ভার ত্রুটি! দয়া করে কিছু সময় পরে চেষ্টা করুন।"
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
@cherrypy.expose
def error(self):
raise cherrypy.HTTPError(500, "সার্ভার ত্রুটি!")
if __name__ == '__main__':
cherrypy.config.update({
'tools.sessions.on': True,
'tools.staticdir.on': True,
})
cherrypy.tree.mount(GlobalErrorHandler(), '/', {
'/': {
'request.error_page': '/error'
}
})
cherrypy.quickstart(GlobalErrorHandler())
এখানে:
request.error_pageগ্লোবালি সেট করা হয়েছে, যাতে সব ত্রুটি এক কাস্টম পৃষ্ঠায় পরিচালিত হয়।
উপসংহার
CherryPy তে Logging এবং Error Handling ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ এবং সহজ। আপনি অ্যাপ্লিকেশনের কার্যকলাপ এবং ত্রুটির লগ রাখতে পারেন এবং কাস্টম ত্রুটি পৃষ্ঠা তৈরি করে ব্যবহারকারীর জন্য ভালো অভিজ্ঞতা নিশ্চিত করতে পারেন। CherryPy এর লগিং এবং ত্রুটি পরিচালনা সিস্টেম আপনাকে অ্যাপ্লিকেশন পরিচালনার জন্য প্রয়োজনীয় ডেটা সরবরাহ করে এবং ত্রুটি হ্যান্ডলিং এর মাধ্যমে নিরাপত্তা এবং ব্যবস্থাপনা উন্নত করে।
Read more