কোনও অ্যাপ্লিকেশন জুড়ে স্থির লগিং পদ্ধতি ব্যবহার করার পরিবর্তে লগার অবজেক্ট কেন তৈরি করবেন?


14

একটি সাধারণ রুবি অন রেল অ্যাপ্লিকেশন এর উদাহরণ গ্রহণ করা। এটি Loggerঅ্যাপ্লিকেশন লোড প্রক্রিয়া চলাকালীন একটি অবজেক্ট তৈরি করে:

# in environment.rb
config.logger = Logger.new(<STDOUT | file | whatever>)

# and in our application we use this object
logger.warn "This process is taking too long to process. Optimization needed."

আমার প্রশ্ন হ'ল আমরা লগিংয়ের জন্য শ্রেণি পদ্ধতি (বা স্থির পদ্ধতি) ব্যবহার করি না কেন? Logger.warnস্কেল হবে না Logger.new.warn? বা কমপক্ষে Logger.warnচেয়ে স্বজ্ঞাত মনে হয় Logger.new.warn

এমনকি যদি Logger.newএকটি সিঙ্গলটন অবজেক্ট হয় তবে এটি কী কী সুবিধা দেয়?

উত্তর:


17

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

Logger logger = Logger.get("Network");

নেটওয়ার্ক সংযোগ, ড্রপ প্যাকেট ইত্যাদির সাথে সম্পর্কিত জিনিসগুলি লগ করতে পারে বা

Logger logger = Logger.get("Application");

যা আপনার ব্যবসায়ের যুক্তি / প্রয়োগ সম্পর্কিত জিনিসগুলিতে লগ করবে। কমপক্ষে log4j এর সাহায্যে আপনি কনফিগার করতে পারেন কোন লগ স্তরগুলি আসলে লিখিত হয় (তথ্য, ট্রেস, সতর্কতা, ত্রুটি, ডিফল্ট ডিফল্ট স্তরের উপলব্ধ থাকে)।

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


ধন্যবাদ। স্থিতিশীল পদ্ধতিগুলি কখন ব্যবহার করতে হয় তা বুঝতে এটি সহায়তা করেছিল।
হর্ষ গুপ্ত

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

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

2

লগার.নেইউ এমন একটি কারখানা যা ফলাফল গ্রহণ করবে (শ্রেণি / ফাইলের নাম) take

কনফিগারেশন ফাইলগুলিতে আপনি সিদ্ধান্ত নিতে পারেন কোন প্রকল্পটি পুনরায় সংকলন না করে প্রোগ্রামের অংশগুলির জন্য লগইন করতে হবে না তা কোন স্তরে লগ করতে হবে।

সুতরাং আপনি রিলিজ বিল্ডগুলির জন্য উচ্চ-স্তরের লগিং (ত্রুটিগুলি) ব্যতীত সমস্ত অক্ষম করতে পারবেন এবং আপনি যে অংশগুলি ডিবাগ করছেন তার জন্য কেবল সর্বনিম্ন স্তরটি সক্রিয় করতে পারেন।


2

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

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

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

সামগ্রিকভাবে, আমি আপনাকে ডিআই পদ্ধতির চেষ্টা করার পরামর্শ দিচ্ছি, যাতে আপনি পরে নিজের কোডটি অকেজোযোগ্য এবং অনর্থক খুঁজে না পান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.