এটি log4j2 সহ slf4j ব্যবহার করার উপযুক্ত কি?


114

লগ 4j2 দিয়ে slf4j ব্যবহার করবেন কিনা তা আমি সিদ্ধান্ত নিতে সক্ষম নই। অনলাইন পোস্টের উপর ভিত্তি করে, দেখে মনে হচ্ছে না এটির কোনও পারফরম্যান্স হিট হবে তবে এটি কি সত্যই প্রয়োজনীয়।

এছাড়াও এই পয়েন্টগুলি লগ 4j2 এর পক্ষে রায় দেয়:

  • SLF4J আপনার অ্যাপ্লিকেশনকে স্ট্রিংগুলিতে লগ করতে বাধ্য করে। লগ 4 জ 2 এপিআই যদি আপনি পাঠ্য লগ করতে চান তবে যে কোনও চার সিক্যুয়েন্স লগ করতে সমর্থন করে, তবে যেকোন অবজেক্ট যেমন আছে তেমন লগিং সমর্থন করে।
  • লগ 4 জ 2 এপিআই মেসেজ অবজেক্টস, জাভা 8 ল্যাম্বডা এক্সপ্রেশন এবং আবর্জনামুক্ত লগিংয়ের জন্য সহায়তা সরবরাহ করে (এটি ভার্সার অ্যারে তৈরি করা এড়ায় এবং চারসেস্কেন্স অবজেক্টগুলিতে লগ করার সময় স্ট্রিং তৈরি করা এড়ানো হয়)।

2
হতে পারে. আমার অ্যাপ্লিকেশন সার্ভারটিতে slf4jলগব্যাক (বা লগ 4jv1) অন্তর্ভুক্ত থাকলে কী হবে ? আমাকে তখন আপনার অ্যাপ্লিকেশনটি ব্যবহার করার জন্য তৃতীয় লগার ইনস্টল করতে বাধ্য করা উচিত? অথবা হতে পারে কর্পোরেট সুরক্ষা সিদ্ধান্ত নেয় আপনি কেবল java.util.loggingউত্পাদন ক্ষেত্রে ব্যবহার করতে পারেন , তবে কি?
এলিয়ট ফ্রিচ

লেখার জন্য ধন্যবাদ। তবে, যদি প্রত্যেকে log4j org org প্রশস্ত ব্যবহার করে উপরের যুক্তিটি বৈধ রাখে না।
অ্যান্ডি 897

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

আপনি চাইলে লগ 4j2 সহ slf4j ব্যবহার করার কোনও উপায় আছে কি? এই পৃষ্ঠাটি log4j - সংস্করণ 1.2 - যা লাইফের শেষ) সহ ব্যবহার দেখায় তবে লগ 4 জ 2 এর বিকল্প নেই। যদি কোনও উপায় থাকে তবে slf4j কেন এটি উল্লেখ করে না?
জে উডচাক

উত্তর:


162

এগিয়ে যান: slf4j এর পরিবর্তে log4j2 API এ প্রোগ্রাম করুন

এটি নিরাপদ: লগ 4 জ 2 এপিআই আরও অনেকগুলি slf4j এর মতো একই গ্যারান্টি সরবরাহ করে।

এখন যে লগ 4 জ 2 নিজেই একটি এপিআই এবং একটি বাস্তবায়ন মডিউলে বিভক্ত, এসএলএফ 4 জে ব্যবহার করার আর কোনও মূল্য নেই।

হ্যাঁ, আপনার বিকল্পগুলি উন্মুক্ত রাখা ভাল ইঞ্জিনিয়ারিং অনুশীলন। আপনি পরে অন্য লগিং প্রয়োগে পরিবর্তন করতে চাইতে পারেন।

গত 10 বছর বা তার বেশি সময় ধরে, আপনার আবেদনে এ জাতীয় নমনীয়তা তৈরির অর্থ এসএলএফ 4 জে'র মতো একটি র‍্যাপার এপিআই ব্যবহার করা using যদিও এই নমনীয়তাটি নিখরচায় আসে না: এই পদ্ধতির অসুবিধাটি হ'ল আপনার অ্যাপ্লিকেশনটি অন্তর্নিহিত লগিং লাইব্রেরির সমৃদ্ধ বৈশিষ্ট্য সেটটি ব্যবহার করতে পারে না।

লগ 4 জ 2 এমন একটি প্রস্তাব দেয় যা আপনার অ্যাপ্লিকেশনটি সর্বনিম্ন সাধারণ ডিনোমিনেটরে সীমাবদ্ধ নয়।

অব্যাহতি ভালভ: log4j-to-slf4j

Log4j2 এর মধ্যে একটি log4j-to-slf4jসেতু মডিউল অন্তর্ভুক্ত রয়েছে । লগ 4j2 এপিআই-এর বিপরীতে কোডযুক্ত যে কোনও অ্যাপ্লিকেশন যেকোন সময় যে কোনও এসএলফ 4 জে-অনুগত বাস্তবায়নে ব্যাকিংয়ের প্রয়োগটি স্যুইচ করতে পছন্দ করতে পারে।

log4j টু slf4j

প্রশ্নে উল্লিখিত হিসাবে, লগ 4 জ 2 এপিআই ব্যবহার করে সরাসরি আরও কার্যকারিতা সরবরাহ করা হয় এবং এসএলএফ 4 জ এর মতো মোড়ক এপিআই ব্যবহার করে বনাম কিছু অ-কার্যকরী সুবিধা রয়েছে:

  • বার্তা এপিআই
  • অলস লগিংয়ের জন্য ল্যাম্বডাস
  • কেবল স্ট্রিংয়ের পরিবর্তে যে কোনও অবজেক্ট লগ করুন
  • আবর্জনামুক্ত: ভারার্গস তৈরি করা বা সম্ভব যেখানে স্ট্রিং তৈরি করা এড়ান
  • ক্লোজযোগ্য থ্রেডকনটেক্সট MDC থেকে আইটেমগুলি সমাপ্ত হলে স্বয়ংক্রিয়ভাবে সরিয়ে দেয়

( আরও তথ্যের জন্য এসএলএফ 4 জে 10 লগ 4 জ 2 এপিআই বৈশিষ্ট্য উপলব্ধ নেই ))

অ্যাপ্লিকেশনগুলি লগইন লোগোজেজে কোর বাস্তবায়নে লক না করেই লগ 4 জ 2 এপিআইয়ের এই সমৃদ্ধ বৈশিষ্ট্যগুলি নিরাপদে ব্যবহার করতে পারে।

SLF4J এখনও আপনার সুরক্ষা ভালভ, এর অর্থ এই নয় যে আপনার অ্যাপ্লিকেশনটি আর SLF4J API এর বিরুদ্ধে কোড করা উচিত code


প্রকাশ: আমি লগ 4 জ 2 তে অবদান রাখছি।


আপডেট: কিছুটা বিভ্রান্তি দেখা যাচ্ছে যে লগ 4j2 এপিআই-তে প্রোগ্রামিং কোনওভাবে "একটি মুখের জন্য মুখ" প্রবর্তন করে ces লোগ 4 জ 2 এপিআই এবং এসএলএফ 4 জ এর মধ্যে এই সম্মানের কোনও পার্থক্য নেই।

নেটিভ বাস্তবায়ন ব্যবহার করার সময় উভয় এপিআই-তে 2 নির্ভরতা এবং অ-নেটিভ বাস্তবায়নের জন্য 4 নির্ভরতা প্রয়োজন। এসএলএফ 4 জে এবং লগ 4 জ 2 এপিআই এই ক্ষেত্রে একরকম। উদাহরণ স্বরূপ:

প্রয়োজনীয় নির্ভরতাগুলি এসএলএফ 4 জে এবং লগ 4 জ 2 এপিআইয়ের জন্য সমান


7
আমি বুঝেছি. আমাকে আমার প্রশ্নটি নতুন করে বলি। লগ 4j2 ছাড়া লগ 4j2 এপিআইয়ের কোনও স্বাধীন বাস্তবায়ন রয়েছে?
Ceki

5
Log4j2 API ও impl হয় না "শক্তভাবে মিলিত"। এই সব SLF4J বাস্তবায়নের সব পাওয়া যায়: Log4j2 এপিআই বিরুদ্ধে কোডেড একটি অ্যাপ্লিকেশান নির্বাচন করতে পারেন log4j-to-slf4jপরিবর্তে নির্ভরতা log4j-coreএবং এই SLF4J বাস্তবায়নের উল্লেখ করেছে কোন চয়ন। লগ 4 জ 2 এপিআই এর নেটিভ বাস্তবায়নের সংখ্যা অপ্রাসঙ্গিক।
রিমকো পপমা

19
সমস্যাটি হ'ল আপনার প্রায়শই গ্রন্থাগারগুলির উপর নির্ভরতা থাকে যা তারা নিজেরাই slf4j ব্যবহার করে, তাই কেবল এটির সাথে থাকা খুব সহজ।
ডেভিও 18

18
সুতরাং, আমি একটি প্রয়োগের জন্য একটি ইন্টারফেস জন্য একটি ইন্টারফেস ব্যবহার করা উচিত? হ্যাঁ, ধন্যবাদ না ... লগিংয়ের জন্য বাস্তবায়নের জন্য একটি ভাল ইন্টারফেস সরবরাহ করে Slf4j লগ 4j কে পঞ্চকে পরাজিত করেছে ... লগ 4 জ 2 কেবলমাত্র slf4j এপি বাস্তবায়ন করা উচিত - যদি কোনও অনুপস্থিত বৈশিষ্ট্য থাকে, তবে এটির পিছনে অবদান রাখুন, যদি slf4j নতুন না নেয় বৈশিষ্ট্য, তারপরে লগ 4j2 এপিআই ইন্টারফেসের ক্ষেত্রে একটি মামলা থাকতে পারে ....
রকমিটহার্ডপ্লেস

4
@ রেমকোপমা - আপনি এখনও লগ 4 জ ইন্টারফেসটি ব্যবহার করার পক্ষে পরামর্শ দিচ্ছেন। হ্যাঁ, আমি এটি পেয়েছি - আমি লগ 4 জ 2 এর ইন্টারফেস -> এসএলএফ 4 জ ইন্টারফেস -> যা কিছু বাস্তবায়ন করতে পারি, তবে আমি কেবল বিমূর্ত বিমূর্তিটি করতাম না - ধন্যবাদ তবে ধন্যবাদ নেই।
রকমিটহার্ডপ্লেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.