ক্যাচ-অল বা বেস ব্যতিক্রম শ্রেণিতে ব্যতিক্রমগুলি লগ করা আরও বোধগম্য?


15

আমি মোটামুটি বড় একটি ওয়েব অ্যাপ রিফেক্টর করার প্রক্রিয়াধীন। প্রধান সমস্যাগুলির মধ্যে একটি হ'ল অসঙ্গতিযুক্ত ত্রুটি পরিচালনা এবং আমি একটি বুদ্ধিমান কৌশল নিয়ে আসার চেষ্টা করছি। আমি সেট_অরর_হ্যান্ডলারের মাধ্যমে একটি কাস্টম ত্রুটি হ্যান্ডলার তৈরি করেছি যা পিএইচপি ত্রুটিগুলি ত্রুটিযুক্তরূপে এবং কাস্টম বেস ব্যতিক্রম ব্যত্রে সরাসরি পরিবর্তন করে, ব্যতিক্রম থেকে সরাসরি উত্তরাধিকার সূত্রে পরিণত করে ।

উত্পাদনে আমি জেনেরিক ব্যতিক্রম ক্যাপ-অল ব্যবহার করছি, সেট_ এক্সসেপশন_হ্যান্ডলারের মাধ্যমে এবং আমি মিশ্রণে ব্যতিক্রম লগিং * যুক্ত করতে চলেছি । আমার দ্বিধাটি হ'ল বেস ব্যতিক্রম শ্রেণিতে বা ক্যাচ-অল আসল লগিংটি কোথায় করা যায়।

এটি ক্যাপ-অলটিতে লগ করার জন্য বেশ কয়েকটি কারণ ভেবেছি:

  • কোডটিতে বেশ কয়েকটি ব্যতিক্রম রয়েছে যা বেস ব্যতিক্রম শ্রেণির কিছু উপযুক্ত সন্তানের রূপান্তর করা দরকার। এটি না হওয়া পর্যন্ত সমস্ত ব্যতিক্রম লগ হবে না।
  • এটি একরকম ক্যাচ-অলটিতে করা আরও প্রাকৃতিক বলে মনে করে, একটি বেস ব্যতিক্রম শ্রেণি কেবল এমনটি করার চেয়ে বেশি কিছু করা উচিত নয়। (এটি একটি একক দায়িত্বের নীতিগত জিনিস হতে পারে তবে এটি কেবল একটি বিভ্রান্ত অনুভূতি হতে পারে)

এবং বেস ব্যতিক্রম শ্রেণিতে লগ ইন করার একটি কারণ:

  • বর্তমানে ক্যাচ-অল কেবলমাত্র উত্পাদনে ব্যবহৃত হয়। এটি আমাদের অন্যান্য পরিবেশে (ডেভলপমেন্ট, টেস্টিং) প্রবর্তন করা সহজ হবে তবে এটি পরিবেশগতভাবে 404/503 ত্রুটি পৃষ্ঠায় অনুবাদ হওয়ার সাথে সাথে পরিবেশ অনুযায়ী প্রতি ত্রুটিগুলি ভিন্নভাবে পরিচালনা করা হয় বলে কিছু সামঞ্জস্যের প্রয়োজন হবে।

লগিং ব্যতিক্রমগুলি যেখানে কোনও গ্রহণযোগ্য অনুশীলন আছে?

* লগিংয়ের ফলে প্রথমে কোনও পাঠ্য ফাইলে লেখা জড়িত থাকে এবং এটি নির্দিষ্ট ধরণের ব্যতিক্রমের জন্য মেলগুলি প্রেরণে বিকশিত হতে পারে।


@ অহোলিস্যাম্পলারের জবাব দ্বারা অনুরোধ করা কিছু স্পষ্টতা :

আমি প্রচুর তৃতীয় পক্ষের স্টাফ সহ একটি 2 * 10। 6 স্লোক কোডবেসের মুখোমুখি, আমার কোনও নিয়ন্ত্রণ নেই এবং পিএইচপি-তে পূর্ব-তারিখ ব্যতিক্রমগুলির সাথে আমার কিছু কোড নিয়ন্ত্রণ করে। এবং কিছু কৃপণতম সাম্প্রতিক কোডও রয়েছে, আমরা দীর্ঘ সময়ের তীব্র চাপ থেকে পুনরুদ্ধার করছি যেখানে আমাদের কার্যত চিন্তাভাবনা বন্ধ করতে হয়েছিল এবং কেবল হ্যাক হয়েছিল।

আমরা সমস্ত অসঙ্গতিগুলি সমাধান করার জন্য সক্রিয়ভাবে সংশোধন করছি এবং একটি বুদ্ধিমান ত্রুটি পরিচালনার পদ্ধতির পরিচয় দিচ্ছি, তবে এতে কিছুটা সময় লাগবে। ত্রুটিগুলি যথাযথভাবে পরিচালিত না হওয়া অবধি পৌঁছা পর্যন্ত আমি কী করতে হবে সে সম্পর্কে আমি আরও আগ্রহী। আমি সম্ভবত কিছু সময়ে একটি বুদ্ধিমান ব্যতিক্রম কৌশল সম্পর্কে অন্য প্রশ্ন জিজ্ঞাসা করব।

লগিংয়ের পিছনে মূল প্রেরণা হ'ল যখনই উত্পাদনে খারাপ কিছু ঘটে তখনই আমার ফোনে একটি ইমেল পাওয়া। ডেটা ডাম্পগুলি বিশাল আকার ধারণ করে কিনা সে বিষয়ে আমার কোনও খেয়াল নেই, যদি সেগুলি করে তবে আমার কাছে ক্রোন জব থাকবে যা এখন থেকে পুরানোগুলি মুছে ফেলবে।

উত্তর:


11

সংক্ষেপে, কেবলমাত্র যখন আপনি এটি পরিচালনা করছেন তখন কোনও ব্যতিক্রমের অস্তিত্ব লগ ইন করা উচিত।

আপনি যখন কোনও ব্যতিক্রম ছুঁড়ে মারেন তখন এটি আপনার কোডটি এমন একটি স্থানে পৌঁছেছে যেখানে এটি সঠিকভাবে এগিয়ে যেতে পারে না। একটি ব্যতিক্রম ছুঁড়ে দিয়ে, আপনি ঘটেছে ত্রুটি সম্পর্কে আপনার প্রোগ্রামে একটি নির্দিষ্ট বার্তা উপস্থাপন করছেন। আপনি সঠিকভাবে পরিচালনা করা যায় এমন একটি পর্যায়ে না আসা পর্যন্ত আপনাকে একটি ব্যতিক্রম ধরা উচিত নয়।

আপনার মূল অ্যাপ্লিকেশনটির অংশ হিসাবে আপনি যে কোডটি লিখেছেন তা নিক্ষেপ করা যেতে পারে এবং কখন নিক্ষেপ করা হতে পারে সে সম্পর্কে তার সচেতন হওয়া উচিত। আপনি যদি ব্যতিক্রম ব্যতীত উত্পাদনশীল কিছু করতে না পারেন তবে এটি ধরবেন না। এটি পরিচালনা না হওয়া পর্যন্ত কোনও ব্যতিক্রম লগ করবেন না। প্রোগ্রামের প্রবাহের প্রসঙ্গে ব্যতিক্রমটির অর্থ এবং কীভাবে এটি প্রতিক্রিয়া জানানো হয় তা কেবল হ্যান্ডলিং কোডই জানেন। এখানে একটি লগ বার্তা লেখার অর্থ হতে পারে। আপনি যদি লগিং ফ্রেমওয়ার্ক ব্যবহার করেন তবে আপনি বার্তাটির জন্য একটি লগ স্তর নির্ধারণ করতে পারেন এবং এগুলি সম্ভবত ফিল্টার করতে পারেন। এটি ঘটতে পারে এমন ব্যতিক্রমগুলির জন্য ভাল কাজ করে তবে সমালোচনা নয় এবং পরিষ্কারভাবে পুনরুদ্ধার করা যায়।

আপনার ব্যতিক্রম ধরা সমস্ত, আপনার কোডটিকে কুৎসিত মৃত্যুর হাতছাড়া হওয়ার জন্য সর্বশেষ চেষ্টা করার চেষ্টা। যদি আপনি এখন পর্যন্ত এটি অর্জন করে থাকেন তবে আপনি সমস্ত রাষ্ট্র এবং ত্রুটি সম্পর্কিত তথ্য লগইন করতে পারেন। তারপরে আপনি ব্যবহারকারীকে সুন্দরভাবে জানানোর জন্য যথাসাধ্য চেষ্টা করুন যে প্রোগ্রামটি বন্ধ হওয়ার আগেই প্রোগ্রামটি ক্রাশ হচ্ছে। আপনার লক্ষ্যটি এই কোডটি কখনই কার্যকর করা উচিত নয়।

বেস ক্লাসে লগিং এম্বেড করা উপরের নির্দেশিকাগুলি অনুসরণ করে না। বেস শ্রেণি কোডের অবস্থা সম্পর্কে কিছুই জানে না। (স্ট্যাক ট্রেস থাকাতে গণনা করা হয় না কারণ আপনি কোডটি লিখতে যাচ্ছেন না যা এটি বিশ্লেষণের ভিত্তিতে সিদ্ধান্ত নেয়।) বেস ক্লাস তীব্রতা বা কীভাবে ব্যতিক্রম পরিচালনা করা যেতে পারে তা নির্দেশ করতে কিছুই করতে পারে না। আপনি বিশাল ডেটা ডাম্প এবং স্ট্যাকের ট্রেসগুলি চান না প্রতিবার এমন একটি সাধারণ ব্যতিক্রম থাকে যা আপনি পরিচালনা করতে পারেন এবং পরিষ্কারভাবে পুনরুদ্ধার করতে পারেন।


আমি আপনার উত্তর দিয়ে জিজ্ঞাসা প্রশ্নে কিছু স্পষ্টতা যুক্ত করেছি। আমি যা জড়ো করি, সেখান থেকে আপনি যে সমস্ত প্রশ্নটি ক্যাপ-অল-এ লগ ইন করার প্রস্তাব দেন তার ব্যবহারিক দিক থেকে?
ইয়ানিস

1
@ ইয়ানিসরিজোস: হ্যাঁ, আপনার প্রথম পদক্ষেপ হিসাবে ক্যাচ-অলটি কার্যকর করা উচিত। আমি ক্যাচ-অল সম্পর্কে যা বলেছিলাম তা হ'ল এটি আপনার কোড প্রবাহের একটি সাধারণ অংশ হিসাবে ব্যবহার না করে তা নিশ্চিত করার জন্য। একটি অপরিবর্তিত ব্যতিক্রম হ্যান্ডলার বাস্তবায়ন করা গুরুত্বপূর্ণ কারণ এটি আপনাকে প্রতিবার আপনার কোডটি খারাপ কিছু করার সাথে সাথে প্রচুর তথ্য পেতে দেয়।
আনহোলিস্যাম্পলার 12

এমন কোনও লগিং ফ্রেমওয়ার্ক নেই যা সহজেই "এখানে এমন অনেকগুলি জিনিস রয়েছে যা" যদি এটি বরখাস্ত না হয় তবে লগইন করা উচিত "এর ধারণাটি সহজেই পরিচালনা করতে পারে? প্রতিটি স্তর যা একটি ব্যতিক্রম দেখায় তা পূর্ববর্তী থেকে ডেটাগুলিকে ছড়িয়ে দিতে পারে, ব্যতীত যদি কোনও নতুন ব্যতিক্রম শেষ লগের প্রতিবেদনটি আনমন্ডিংয়ের পথে ফেলে দেওয়া হয় তবে তা বাতিল হয়ে যায় না এবং এভাবে রেকর্ড হয়ে যায়। কোনও ফ্রেমওয়ার্কগুলি কি এ জাতীয় নিদর্শন সমর্থন করে না?
সুপারক্যাট

3

যদি আপনার ভাষা / রানটাইম সহজেই আপনাকে ব্যতিক্রমের উত্স নির্ধারণ করতে না দেয় তবে নিক্ষেপ করে এটি লগ করার জন্য একটি মামলা রয়েছে। সি ++ এবং কিছু জেএস ইঞ্জিনগুলি ফাইল + লাইন বা কল স্ট্যাকের ব্যতিক্রমটি আপনার ধরা পড়ার সময় পর্যন্ত প্রকাশ করে না / তবে আপনি ব্যতিক্রমটি নির্মাণের সময় এই তথ্য উপলব্ধ।

আমাদের সমাধানটি এমন একটি প্রক্রিয়া সরবরাহ করা ছিল যা এই সমস্যাগুলি সনাক্তকরণের চেষ্টা করার সময় একটি সস্তা-স্ট্যাকের পাশাপাশি ব্যতিক্রমের ধরণের লগিং সক্ষম করতে রানটাইম কনফিগারেশন ব্যবহার করে।


+1 থ্রোতে লগইন করার জন্য এটি অবশ্যই একটি ভাল কেস ... পিএইচপি যদিও ধরা পড়ার জন্য পুরো স্ট্যাক ট্রেস সরবরাহ করে, তাই আমি সম্ভবত
অন্যভাবে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.