আমি বর্তমানে একটি বহু স্তরযুক্ত আর্কিটেকচারের সাথে একটি বৃহত সাবসিস্টেম রিফ্যাক্টর করছি এবং আমি কার্যকর ত্রুটি লগিং-হ্যান্ডলিংয়ের কৌশলটি ডিজাইনের জন্য সংগ্রাম করছি।
ধরা যাক যে আমার স্থাপত্যে নিম্নলিখিত তিনটি স্তর রয়েছে:
- পাবলিক ইন্টারফেস (IE একটি এমভিসি নিয়ন্ত্রক)
- ডোমেন স্তর
- ডেটা অ্যাক্সেস লেয়ার
আমার বিভ্রান্তির উত্স হ'ল যেখানে ত্রুটি লগিং-হ্যান্ডলিংয়ের প্রয়োগ করা উচিত:
সবচেয়ে সহজ সমাধানটি হবে শীর্ষ স্তরের লগিং বাস্তবায়ন (IE পাবলিক ইন্টারফেস \ এমভিসি কন্ট্রোলার)। তবে এটি ভুল অনুভব করে কারণ এর অর্থ ভিন্ন স্তরগুলির ব্যতিক্রমকে বুবলি করা এবং তারপরে এটি লগ করা; পরিবর্তে এটি উত্স লগ ইন।
এটির উত্সটিতে ব্যতিক্রমটি লগইন করা স্পষ্টতই সেরা সমাধান কারণ আমার কাছে সর্বাধিক তথ্য রয়েছে। এর সাথে আমার সমস্যাটি হ'ল আমি সমস্ত ব্যাতিক্রম না ধরে উত্সের প্রতিটি ব্যতিক্রম ধরতে পারি না এবং ডোমেন / পাবলিক ইন্টারফেস স্তরে এটি ইতিমধ্যে নীচে থাকা স্তরের দ্বারা ধরা পড়া, লগইন করা এবং পুনরায় ছুঁড়ে ফেলা ব্যতিক্রমগুলি ধরার দিকে পরিচালিত করবে ।
আর একটি সম্ভাব্য কৌশল হ'ল # 1 এবং # 2 এর মিশ্রণ; যার মাধ্যমে আমি স্তরে নির্দিষ্ট ব্যতিক্রমগুলি ধরি সেগুলি সম্ভবত ছুঁড়ে ফেলার সম্ভাবনা রয়েছে (IE ক্যাচিং, লগিং এবং
SqlExceptions
ডেটা অ্যাক্সেস লেয়ারে পুনরায় নিক্ষেপ ) এবং তারপরে উপরের স্তরের আরও কিছু ব্যাতিক্রম ব্যতিক্রম লগ করুন। তবে এটির জন্য আমারও শীর্ষ স্তরের প্রতিটি ব্যতিক্রম ধরা এবং পুনর্বিবেচনার প্রয়োজন হবে, কারণ আমি ইতিমধ্যে লগ হওয়া ত্রুটিগুলির মধ্যে পার্থক্য করতে পারি না vs যেগুলি নেই তার বিপরীতে পরিচালিত।
এখন, বেশিরভাগ সফ্টওয়্যার অ্যাপ্লিকেশনগুলিতে অবশ্যই এটি একটি সমস্যা, সুতরাং অবশ্যই এই সমস্যার একটি স্ট্যান্ডার্ড সমাধান থাকতে হবে যার ফলে ব্যতিক্রমগুলি উত্সটিতে ধরা পড়ে এবং একবার লগ হয়; তবে আমি নিজেই এটি কীভাবে করব তা দেখতে পাচ্ছি না।
দ্রষ্টব্য, এই প্রশ্নের শিরোনামটি ' বহু স্তরের অ্যাপ্লিকেশনটিতে লগিং ব্যতিক্রমগুলি "" এর সাথে খুব মিল , তবে এই পোস্টের উত্তরগুলির বিশদই নেই এবং আমার প্রশ্নের উত্তর দেওয়ার পক্ষে যথেষ্ট নয়।
The easiest solution would be to implement the logging at the top level
- এটা কর. তাদের উত্সে ব্যতিক্রমগুলি লগইন করা ভাল ধারণা নয় এবং আমি যে সমস্ত অ্যাপ্লিকেশনটির মুখোমুখি হয়েছি তা এটি ডিবাগ করার জন্য পিআইটিএ ছিল। ব্যতিক্রমগুলি পরিচালনা করার জন্য কলারের দায়িত্ব হওয়া উচিত।
try{ ... } catch(Exception ex) { Log(ex); }
প্রতিটি লেয়ারে কোড মোড়ানো দিয়ে প্রতিটি স্তরে একই ব্যতিক্রম লগ করা হবে। (কোড বেসের প্রতিটি স্তরে প্রতিটি ব্যতিক্রম