কোন নকশার প্যাটার্ন লগিংয়ের জন্য আরও উপযুক্ত?


10

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

MyGloriousLogger.getXXXLogger().Log(LogPlace, new LogObject(z1, z2, z3, z4, ..., z99));

আমি কি পর্যবেক্ষক ডিজাইনের ধরণটি ব্যবহার করতে ভুল করি? আমার অন্য ডিজাইনের প্যাটার্ন দরকার? বা আমার নকশা নিদর্শন সম্পর্কে চিন্তা করা বন্ধ করা উচিত?

PS1। আমি যদি কেবল শ্রোতা এবং পর্যবেক্ষককে ব্যবহার করে লগইন করতে চাই তবে অবশ্যই আমি অবশ্যই প্রোগ্রামটির পর্যবেক্ষক এবং শ্রোতাদের যুক্ত এবং উন্নত করতে চাই।

PS2। আমি অবশ্যই জানি যে জাভাতে লগিংয়ের জন্য বিভিন্ন গ্রন্থাগার রয়েছে এবং আমি java.utils.logging ব্যবহার করছি তবে আমার বিশেষ অবজেক্টগুলিতে লগ করার জন্য আমার একটি র‍্যাপার থাকা দরকার।


2
জাভা ইতিমধ্যে 17 লগিং ফ্রেমওয়ার্ক এবং মেটা-লগিং ফ্রেমওয়ার্ক (slf4j) এবং সম্ভবত কিছু মেটা-মেটা-লগিং ফ্রেমওয়ার্ক রয়েছে এবং সেগুলির কোনওটিই আপনার পক্ষে কাজ করে না?
কেভিন cline

উত্তর:


15

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

দায়িত্বের চেইন - লগার


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

8

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


0

ঠিক আছে, পর্যবেক্ষক আমার পক্ষে অযোগ্য মনে হচ্ছে। এছাড়াও, "যেখানে আপনার প্রয়োজন সেখানে" লগার কল টস করা আপনার কোডকে ছিন্নভিন্ন করে দেবে এবং এসআরপি লঙ্ঘন করবে।

আপনি - উদাহরণস্বরূপ - এর জন্য এওপিতে আগ্রহী হতে পারেন, যাতে আপনি পদ্ধতি টীকাগুলির মাধ্যমে লগার কল সংযুক্ত করতে পারেন।


0

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

সাধারণত আমি দেখেছি লগলভেলগুলি ভিন্ন তবে লগিং ফাইলটি একই।

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

এইভাবে আমি দেখতে পাচ্ছি যে আমরা অ্যাপ্লিকেশন কোড থেকে আমাদের লগিং কোডটি ডিকুয়াল করতে পারি।

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