কেন একজন অন্যটির পরিবর্তে নিম্নলিখিত প্যাকেজগুলির মধ্যে একটি ব্যবহার করবেন?
- জাভা লগিং
- কমন্স লগিং
- Log4j
- SLF4j
- Logback
কেন একজন অন্যটির পরিবর্তে নিম্নলিখিত প্যাকেজগুলির মধ্যে একটি ব্যবহার করবেন?
উত্তর:
এপিআই উপস্থিতির কালানুক্রমিক ক্রমে (যতদূর আমি জানি):
logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
// Note that it's actually *more* efficient than this - see Huxi's comment below...
logger.debug("The entry is " + entry + ".");
}
আমি জাভাতে লগিংটি বিভ্রান্তিকর, অসঙ্গত, খুব কম নথিভুক্ত এবং বিশেষত হাফজার্ড হিসাবে দেখতে পাচ্ছি। তদুপরি, এই লগিং ফ্রেমওয়ার্কগুলির মধ্যে প্রচুর পরিমাণে সাদৃশ্য রয়েছে যার ফলস্বরূপ সদৃশতা এবং আপনি যে লগিং পরিবেশটি আসলে আসছেন তা নিয়ে বিভ্রান্তি রয়েছে particular বহুলগিং পরিবেশ এক সময়; (যেমন হাইবারনেট log4j, এবং টমক্যাট java.util.logging ব্যবহার করতে পারে)। অ্যাপাচি কমন্সগুলি বিভিন্ন লগিং ফ্রেমওয়ার্কগুলি ব্রিজ করার জন্য বোঝানো হয়, তবে সত্যই আরও জটিলতা যুক্ত করে। আপনি যদি সময়ের আগে এটি না জানেন তবে এটি সম্পূর্ণ বিচলিত। কেন আমার লগ বার্তাগুলি কনসোলে প্রিন্ট করছে না ইত্যাদি? ওহ কারণ আমি টমক্যাট লগগুলি খুঁজছি, এবং লগ 4 জে না। জটিলতার আরও একটি স্তর যুক্ত করার পরে, অ্যাপ্লিকেশন সার্ভারে গ্লোবাল লগিং কনফিগারেশন থাকতে পারে যা কোনও নির্দিষ্ট ওয়েব অ্যাপ্লিকেশনের জন্য স্থানীয় কনফিগারেশনগুলিকে স্বীকৃতি দিতে পারে না। শেষ অবধি, এই সমস্ত লগিং ফ্রেমওয়ার্কগুলি ওয়েল টু কমপ্লিকেটেড। জাভাতে লগ ইন করা আমার মতো বিকাশকারীরা হতাশ এবং বিভ্রান্ত হয়ে পড়েছে একটি অগোছালো গোলযোগ।
জাভার প্রাথমিক সংস্করণগুলিতে কোনও বিল্ট-ইন লগিং ফ্রেমওয়ার্ক নেই যা এই দৃশ্যের দিকে নিয়ে যায়।
এখানে একটি গুরুত্বপূর্ণ বিষয় রয়েছে যা আগে উল্লেখ করা হয়নি:
এসএলএফ 4 জে (এবং লগিং ব্যাকএন্ড হিসাবে লগব্যাক এবং এলওজি 4 জে উভয়েরই) তথাকথিত ম্যাপযুক্ত ডায়াগনস্টিক কনটেক্সট (এমডিসি, জাভাদোক এবং ডকুমেন্টেশন দেখুন ) এর জন্য সমর্থন রয়েছে।
এটি মূলত একটি থ্রেড-স্থানীয় মানচিত্র <স্ট্রিং, স্ট্রিং> যা আপনি আপনার লগিং ইভেন্টে অতিরিক্ত প্রসঙ্গ তথ্য যুক্ত করতে ব্যবহার করতে পারেন। এমডিসির বর্তমান অবস্থা প্রতিটি ইভেন্টের সাথে যুক্ত।
আপনি যদি ব্যবহারকারীর নাম এবং অনুরোধের ইউআরএল (কোনও ওয়েব অ্যাপ্লিকেশানের ক্ষেত্রে) এর মতো জিনিসগুলি এতে রাখেন তবে এটি অবিশ্বাস্যভাবে কার্যকর হতে পারে। এটি ফিল্টার ব্যবহার করে স্বয়ংক্রিয়ভাবে করা যেতে পারে।
ত্রুটি লগ করার সর্বোত্তম অনুশীলনগুলি কী কী সে প্রশ্নের উত্তর দেখুন ? বিশেষত:
কমন্স লগিংয়ের সাথে কয়েকটি সম্ভাব্য শ্রেণিবদ্ধকরণ সমস্যা রয়েছে।
লগ 4 জে এবং এসএলএফ 4 জে একই ব্যক্তির দ্বারা বিকাশ করা হয়েছিল, লগ 4 জে অনুশীলনে পাওয়া সমস্যাগুলি থেকে শিখতে।
আমাদের কোম্পানির প্রকল্পে আমরা LOG4j ব্যবহার করি এবং স্টিফেন তার উদাহরণে যেমন দেখিয়েছিল তেমন ব্যবহার করা খুব সহজ। আমরা LOG4j এর জন্য আমাদের নিজস্ব প্যাটার্ন ক্লাসও লিখেছি যাতে আপনি নিজের আউটপুট ফাইল স্কিমা তৈরি করতে পারেন। আপনার লগ ফাইলটি কেমন হওয়া উচিত তা আপনি বর্ণনা করতে পারেন। মূল লগ 4 জ ক্লাস উন্নত করা সম্ভব।
সমস্ত LOG4j বৈশিষ্ট্য আপনি একটি log4j.properties ফাইলে পরিবর্তন করতে পারেন, যাতে আপনি বিভিন্ন প্রকল্পের জন্য বিভিন্ন ফাইল ব্যবহার করতে পারেন।
জাভা লগিং আমার পক্ষে সুবিধাজনক নয়, তবে এটি হতে পারে কারণ আমি শুরু থেকেই লগ 4j ব্যবহার করি।
কমন্স লগিং ওভারভিউ , পাঠাগার কোড থেকে লগিং আপনাকে অন্তর্নিহিত লগিং কাঠামো উপর কোন নিয়ন্ত্রণ আছে যখন: তার অস্তিত্ব কারণ দেয়। বাইরের অ্যাপ্লিকেশনগুলির সাথে লিঙ্কযুক্ত বিভিন্ন অ্যাপাচি প্রকল্পগুলির জন্য খুব গুরুত্বপূর্ণ। অভ্যন্তরীণ আইটি প্রকল্পগুলির জন্য সম্ভবত এতটা গুরুত্বপূর্ণ নয়, যেখানে আপনার সম্পূর্ণ নিয়ন্ত্রণ রয়েছে।
এটি বলেছিল, আমি কমন্স লগিংকে লিখি, আমি জানি এমন অন্যান্য বিকাশকারীদের মতো। মানসিক ব্যাগ হ্রাস করার কারণ: আপনি প্রকল্প বা চাকরী পরিবর্তন করতে পারেন এবং নতুন কাঠামো শিখতে হবে না (তবে নতুন চাকরী / প্রকল্পে সিএলও ব্যবহার করা হয়, এবং / অথবা আপনি তাদের এটিতে যেতে রাজি করতে পারেন)।
এছাড়াও, আপনি যে কোনও ফ্রেমওয়ার্ক ব্যবহার করুন না কেন এটি আপনার নিজের মোড়ক তৈরি করার কিছু মূল্য রয়েছে। এখানে বর্ণিত হিসাবে , আমি কাস্টম স্ট্রিংকরণ (গুরুত্বপূর্ণ) সরবরাহ করতে এবং লগিং স্টেটমেন্টগুলির ভিজ্যুয়াল ক্লাটারকে কমিয়ে আনা (কম গুরুত্বপূর্ণ) ব্যবহার করতে একটি লগওয়্যার্পার অবজেক্টটি ব্যবহার করতে চাই।
সাধারণত আমি লগ 4 জে ব্যবহার করে ডিফল্ট হই।
আমি জাভা ১.৪-এর উপর নির্ভরশীলতা মনে না করলে আমি জাভা লগিং ব্যবহার করব তবে আমি এখনও লগ 4 জে অগ্রাধিকার হিসাবে ব্যবহার করব।
আমি যদি ইতিমধ্যে এটি ব্যবহার করে এমন কিছু বাড়িয়ে তুলি তবে আমি কমন্স লগিং ব্যবহার করব।
আমি একটি পাতলা লগিং মুখোমুখি তৈরির পরামর্শ দেব যা লগিং ফ্রেমওয়ার্কগুলির যে কোনওটিতে লিখতে পারে, এমন সময়ে ব্যাকিং ইঞ্জিনের পছন্দটি একটি মোট পয়েন্ট হয়ে যায়।