জাভাতে লগিং নিয়ে কী হবে? [বন্ধ]


117

কেন একজন অন্যটির পরিবর্তে নিম্নলিখিত প্যাকেজগুলির মধ্যে একটি ব্যবহার করবেন?

  • জাভা লগিং
  • কমন্স লগিং
  • Log4j
  • SLF4j
  • Logback

4
আপনি তা করতে চাইবেন stackoverflow.com/questions/873051 , যা কমন্স লগিং করার SLF4j তুলনা করা হয়।
জেমস ম্যাকমাহন

24
কেন জাহাজগুলি সেকি 3 লগিং ফ্রেমওয়ার্ক তৈরি করেছে !!! পাগলামি ...
এমপি।

6
@mP। - লগ 4 জে প্রথম ছিল, তারপরে মতবিরোধ দেখা গেল এবং slf4j + লগব্যাক লেখা হয়েছিল। slf4j হয় এপিআই এবং API বাস্তবায়ন logback। সমস্ত কিছু নির্বিশেষে, slf4j অত্যন্ত কার্যকর।
থরবজর্ন রাভন অ্যান্ডারসন

3
কেন সেকি গলসি এসএলএফ 4 জে + লগব্যাকটি তৈরি করেছেন তার বিশদগুলির জন্য নীচের ডিভোএক্সিক্স টকটি দেখুন: parleys.com/#st=5&id=1701
বিটেক

এর থেকে বেরিয়ে আসার সেরা জিনিসটি হল slf4j API যা আশা করি লগিং ওয়ার্ল্ডকে একীভূত করবে। আমি মনে করি লগব্যাকটি এখনও বিকাশকারীদের সাথে সমালোচনামূলক ভর অর্জন করতে পারেনি।
থরবজর্ন রাভন অ্যান্ডারসন

উত্তর:


86

এপিআই উপস্থিতির কালানুক্রমিক ক্রমে (যতদূর আমি জানি):

  • Log4j কারণ বেশিরভাগ লোক এটি ব্যবহার করে (আমার অভিজ্ঞতায়)
  • কমন্স লগিং কারণ ওপেন সোর্স প্রকল্পগুলি এটি ব্যবহার করে (যাতে তারা সংহত সমাধানে লগিং ফ্রেমওয়ার্কটি যেভাবে ব্যবহৃত হয় তার সাথে সংহত করতে পারে); বিশেষত বৈধ যদি আপনি কোনও এপিআই / ফ্রেমওয়ার্ক / ওএসএস হন এবং আপনি অন্যান্য প্যাকেজগুলিতে নির্ভর করেন যা কমন্স লগিং ব্যবহার করে।
  • কমন্স লগিং কারণ আপনি কোনও নির্দিষ্ট লগিং কাঠামোতে "লক ডাউন" করতে চান না (সুতরাং পরিবর্তে কমন্স লগিং আপনাকে যা দেবে তা আপনি লক করে রাখুন) - কারণ হিসাবে এই পয়েন্টটি ব্যবহার করা সিদ্ধান্ত নেওয়া বোধগম্য নয়।
  • জাভা লগিং কারণ আপনি একটি অতিরিক্ত জারে যোগ করতে চান না।
  • এসএলএফ 4 জে কারণ এটি কমন্স লগিংয়ের চেয়ে নতুন এবং প্যারামিটারাইজড লগিং সরবরাহ করে:

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 + "."); 
}
  • লগব্যাক কারণ এটি লগ 4 জ-এর চেয়ে নতুন এবং আবার, প্যারামিটারাইজড লগিং সমর্থন করে, কারণ এটি সরাসরি এসএলএফ 4 জে প্রয়োগ করে
  • এসএলএফ 4 জে / লগব্যাক কারণ এটি একই লোক লিখেছেন যিনি লগ 4 জ করেছেন, তাই তিনি এটিকে আরও ভাল করেছেন ( কেন জি অনুসারে - ধন্যবাদ। তাদের আগের সংবাদ পোস্টগুলি দেখার সময় এটি উপযুক্ত মনে হয় )
  • SLF4j কারণ তারা একটি লগ 4j অ্যাডাপ্টার প্রকাশ করে যাতে আপনাকে পুরানো কোডে লগ 4 জে "স্যুইচ আউট" করতে হবে না - কেবল লগ 4j.properties SLF4j ব্যবহার করে এবং এটি কনফিগারেশন করে

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

প্রশ্নের জন্য লোকিকে ধন্যবাদ। আমি এখন জানি যে আমি আর লগ 4 জে আমার ডিফল্ট কাঠামো হিসাবে ব্যবহার করব না। এসএলএফ 4 জে এফটিডব্লিউ! এছাড়াও কেন জি কে ধন্যবাদ জানাতে যে এসএলএফ 4 জে লগ 4 জে হিসাবে একই লোক লিখেছেন
স্টিফেন

3
আপনার কোড উদাহরণে মন্তব্যটি 100% সঠিক নয়। বার্তাটির আসল বিন্যাসটি লজব্যাকের মাধ্যমে অলসভাবে সঞ্চালিত হয় সুতরাং এটি কেবল তখনই ঘটবে যদি ইভেন্টটি সত্যিকার অর্থে কোনও অ্যাপেন্ডার পরিচালনা করে এবং অ্যাপেন্ডারের ফর্ম্যাট বার্তার প্রয়োজন হয় - যা উদাহরণস্বরূপ কোনও সকেটঅ্যাপেন্ডারের ক্ষেত্রে ঘটবে না যেহেতু ইভেন্টটি ব্যবহার করে সিরিয়াল করা হয়েছে। অপরিবর্তিত বার্তা প্যাটার্ন + স্ট্রিং হিসাবে যুক্তি। আমার ধারণা এটি নির্ভর করে যদিও আপনি "কার্যকরভাবে" কীভাবে সংজ্ঞায়িত হন। এটি অবশ্যই একই বার্তা নির্গত করবে (অন্তত যদি প্রবেশ এবং বস্তু একই হয়;)) সুতরাং দয়া করে আমার নিটপিকিং ক্ষমা করুন।
হুসি

6
এসএলএফ 4 জে আসলে একটি এপিআই যা অন্যান্য লগিং ফ্রেমওয়ার্কের শীর্ষে বসে। কমন্স লগিংয়ের লক্ষ্যের মতো, তবে আমার অভিজ্ঞতা থেকে আরও স্বজ্ঞাত।
জেমস ম্যাকমাহন

36

আমি জাভাতে লগিংটি বিভ্রান্তিকর, অসঙ্গত, খুব কম নথিভুক্ত এবং বিশেষত হাফজার্ড হিসাবে দেখতে পাচ্ছি। তদুপরি, এই লগিং ফ্রেমওয়ার্কগুলির মধ্যে প্রচুর পরিমাণে সাদৃশ্য রয়েছে যার ফলস্বরূপ সদৃশতা এবং আপনি যে লগিং পরিবেশটি আসলে আসছেন তা নিয়ে বিভ্রান্তি রয়েছে particular বহুলগিং পরিবেশ এক সময়; (যেমন হাইবারনেট log4j, এবং টমক্যাট java.util.logging ব্যবহার করতে পারে)। অ্যাপাচি কমন্সগুলি বিভিন্ন লগিং ফ্রেমওয়ার্কগুলি ব্রিজ করার জন্য বোঝানো হয়, তবে সত্যই আরও জটিলতা যুক্ত করে। আপনি যদি সময়ের আগে এটি না জানেন তবে এটি সম্পূর্ণ বিচলিত। কেন আমার লগ বার্তাগুলি কনসোলে প্রিন্ট করছে না ইত্যাদি? ওহ কারণ আমি টমক্যাট লগগুলি খুঁজছি, এবং লগ 4 জে না। জটিলতার আরও একটি স্তর যুক্ত করার পরে, অ্যাপ্লিকেশন সার্ভারে গ্লোবাল লগিং কনফিগারেশন থাকতে পারে যা কোনও নির্দিষ্ট ওয়েব অ্যাপ্লিকেশনের জন্য স্থানীয় কনফিগারেশনগুলিকে স্বীকৃতি দিতে পারে না। শেষ অবধি, এই সমস্ত লগিং ফ্রেমওয়ার্কগুলি ওয়েল টু কমপ্লিকেটেড। জাভাতে লগ ইন করা আমার মতো বিকাশকারীরা হতাশ এবং বিভ্রান্ত হয়ে পড়েছে একটি অগোছালো গোলযোগ।

জাভার প্রাথমিক সংস্করণগুলিতে কোনও বিল্ট-ইন লগিং ফ্রেমওয়ার্ক নেই যা এই দৃশ্যের দিকে নিয়ে যায়।


19
এটি কি একটি উত্তর? দেখতে আরও বেশি ভাড়া লাগছে।
মাইকেল মায়ার্স

15
আমি দুঃখিত. এটা তোলে হয় একটি গলাবাজি একটি সামান্য বিট। তবে "জাভাতে লগিং ইন জাভা কী?" - এর একটি জোরালো প্রতিক্রিয়া। সংক্ষেপে উত্তর, এটি গভীরভাবে ভেঙে গেছে।
জুলিয়েন চস্তং

1
ভাল এটি -1 ভোট মূল্য নয়; পি কিন্তু কিছু চিন্তা করা উচিত।
লোকুমু

21
সমস্যাগুলি শুরু হয়েছিল যখন সান আসলে জাভা.ইটিল.লগিং জাভা 1.4 এ যুক্ত করেছে। এর আগে LOG4J ভালভাবে প্রতিষ্ঠিত এবং বিস্তৃত ব্যবহারে ছিল। এরপরে LOG4J এবং java.util.logging উভয় সমর্থন করার জন্য মোড়কের প্রয়োজন ছিল। এছাড়াও, যেহেতু জুলটি জাভাতে রয়েছে * এটি সম্ভবত সবচেয়ে খারাপ সূর্যের ধারণা ছিল ... এবং এটি শেষ পর্যন্ত একটি "ভুল জাভা নাগরিক" এর জন্য জুল ব্যবহার করা উচিত এই ভুল ধারণা নিয়ে আসে।
হুসি

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

22

এখানে একটি গুরুত্বপূর্ণ বিষয় রয়েছে যা আগে উল্লেখ করা হয়নি:

এসএলএফ 4 জে (এবং লগিং ব্যাকএন্ড হিসাবে লগব্যাক এবং এলওজি 4 জে উভয়েরই) তথাকথিত ম্যাপযুক্ত ডায়াগনস্টিক কনটেক্সট (এমডিসি, জাভাদোক এবং ডকুমেন্টেশন দেখুন ) এর জন্য সমর্থন রয়েছে।

এটি মূলত একটি থ্রেড-স্থানীয় মানচিত্র <স্ট্রিং, স্ট্রিং> যা আপনি আপনার লগিং ইভেন্টে অতিরিক্ত প্রসঙ্গ তথ্য যুক্ত করতে ব্যবহার করতে পারেন। এমডিসির বর্তমান অবস্থা প্রতিটি ইভেন্টের সাথে যুক্ত।

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


2
প্রযুক্তিগতভাবে, এটি একটি থ্রেড-স্থানীয় মানচিত্র <স্ট্রিং, স্ট্রিং>।
পিডিএক্স্লিফ

17

ত্রুটি লগ করার সর্বোত্তম অনুশীলনগুলি কী কী সে প্রশ্নের উত্তর দেখুন ? বিশেষত:

  • কমন্স লগিংয়ের সাথে কয়েকটি সম্ভাব্য শ্রেণিবদ্ধকরণ সমস্যা রয়েছে।

  • লগ 4 জে এবং এসএলএফ 4 জে একই ব্যক্তির দ্বারা বিকাশ করা হয়েছিল, লগ 4 জে অনুশীলনে পাওয়া সমস্যাগুলি থেকে শিখতে।


4

আমাদের কোম্পানির প্রকল্পে আমরা LOG4j ব্যবহার করি এবং স্টিফেন তার উদাহরণে যেমন দেখিয়েছিল তেমন ব্যবহার করা খুব সহজ। আমরা LOG4j এর জন্য আমাদের নিজস্ব প্যাটার্ন ক্লাসও লিখেছি যাতে আপনি নিজের আউটপুট ফাইল স্কিমা তৈরি করতে পারেন। আপনার লগ ফাইলটি কেমন হওয়া উচিত তা আপনি বর্ণনা করতে পারেন। মূল লগ 4 জ ক্লাস উন্নত করা সম্ভব।

সমস্ত LOG4j বৈশিষ্ট্য আপনি একটি log4j.properties ফাইলে পরিবর্তন করতে পারেন, যাতে আপনি বিভিন্ন প্রকল্পের জন্য বিভিন্ন ফাইল ব্যবহার করতে পারেন।

জাভা লগিং আমার পক্ষে সুবিধাজনক নয়, তবে এটি হতে পারে কারণ আমি শুরু থেকেই লগ 4j ব্যবহার করি।


4

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

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

এছাড়াও, আপনি যে কোনও ফ্রেমওয়ার্ক ব্যবহার করুন না কেন এটি আপনার নিজের মোড়ক তৈরি করার কিছু মূল্য রয়েছে। এখানে বর্ণিত হিসাবে , আমি কাস্টম স্ট্রিংকরণ (গুরুত্বপূর্ণ) সরবরাহ করতে এবং লগিং স্টেটমেন্টগুলির ভিজ্যুয়াল ক্লাটারকে কমিয়ে আনা (কম গুরুত্বপূর্ণ) ব্যবহার করতে একটি লগওয়্যার্পার অবজেক্টটি ব্যবহার করতে চাই।


1
এছাড়াও একটি কমন্স.লগিং => এসএলএফ 4 জে ব্রিজ রয়েছে যা এসএলএফ 4 জে সমস্ত সিএল লগিংকে রুট করতে ব্যবহৃত হতে পারে। এসএলএফ 4 জে কমন্স.লগিং, এলওজি 4 জে এবং (কিছুটা জটিল, তবে যতটা সম্ভব ভাল) ব্রাউজিং সমর্থন করে জাভা.ইটিল.লগিং যাতে আপনার সমস্ত লগই স্লাফ 4 জে ব্যাকএন্ড ব্যবহার করবেন না কেনেই শেষ হবে। Slf4j.org/legacy.html দেখুন আমি লগব্যাক, বিটিডব্লু ব্যবহার করেছি তবে আপনি যুক্তি দিতে পারেন যে আমি পক্ষপাতদুষ্ট।
হুসি

2

সাধারণত আমি লগ 4 জে ব্যবহার করে ডিফল্ট হই।

আমি জাভা ১.৪-এর উপর নির্ভরশীলতা মনে না করলে আমি জাভা লগিং ব্যবহার করব তবে আমি এখনও লগ 4 জে অগ্রাধিকার হিসাবে ব্যবহার করব।

আমি যদি ইতিমধ্যে এটি ব্যবহার করে এমন কিছু বাড়িয়ে তুলি তবে আমি কমন্স লগিং ব্যবহার করব।


1.4 এর উপর নির্ভরতা মনে করেন না ?? এমনকি 1.4 এর পরিষেবা জীবনের শেষ পর্যন্ত আঘাত করেছে।
টম হাটিন -

2
@ টম তিনি মানে jdk1.4 + বোকা না।
এমপি।

আসলে আমি সম্প্রতি এমন একটি সিস্টেমে কিছু কাজ করেছি যা এখনও jdk 1.3 :-( এর অধীনে চলছিল, এবং এটি দু'বছরেরও কম আগে আমি শেষ পর্যন্ত একটি জেডিকে 1.2 সিস্টেম বজায় রেখেছিলাম T বেশিরভাগ জায়গা আপগ্রেড হয় না যতক্ষণ না তারা একেবারে না থাকে । থেকে, তারা শুধু আপগ্রেড ইন্সটল করতে অস্বীকার
মাইকেল Rutherfurd

0

আমি একটি পাতলা লগিং মুখোমুখি তৈরির পরামর্শ দেব যা লগিং ফ্রেমওয়ার্কগুলির যে কোনওটিতে লিখতে পারে, এমন সময়ে ব্যাকিং ইঞ্জিনের পছন্দটি একটি মোট পয়েন্ট হয়ে যায়।


2
কমন্স লগিংয়ের ফলেই চাকাটি পুনরায় উদ্ভাবন হয় কেন? এছাড়াও কিছু সমস্যা রয়েছে যা আপনার মুখীটিকে হ্যান্ডল করতে হবে যে ইতিমধ্যে কমন্স লগইন করে।
জেমস এএন স্টাফার

+1 কমনের লগিং যুক্তি মোকাবেলায়, কিছু এন্টারপ্রাইজ অ্যাপ্লিকেশন কাস্টম লগার ব্যবহার করে। অন্তর্নিহিত বাস্তবায়নটি আড়াল করা সর্বদা একটি ভাল ধারণা। 'পাতলা' র‍্যাপারটি অন্য জারের প্যাকেজ হওয়ার প্রয়োজনীয়তা দূর করে এবং পুনর্নবীকরণের মতো নয়।
কোয়েস্টজেন

1
সাম্প্রতিককালে যখন আমরা আমাদের ফ্রেমওয়ার্কটি কমপ্যাক্ট ফ্রেমওয়ার্কে (নেট।) রেখেছি তখন এটি আমাকে সংরক্ষণ করেছিল। আমরা যদি এনএলএগের উপর হার্ডকোডযুক্ত নির্ভরতা থাকি তবে আমরা ভুল হয়ে যেতাম। যেহেতু আমরা এই পদ্ধতির ব্যবহার করেছি, আমরা একটি নাল লগারে ছাড়তে এবং খুশি হতে সক্ষম হয়েছি। কেউ আমাকে 0 পর্যন্ত ব্যাক আপ করুন দয়া করে :-)
সিমন

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

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