এই নির্দেশিকাটির লক্ষ্য হল আপনাকে মৌলিক অন্তর্দৃষ্টি এবং অনুশীলনগুলি দিয়ে সজ্জিত করা যাতে আপনি আপনার পরিষেবাগুলিকে আরও কার্যকরভাবে নিরীক্ষণ এবং সমস্যা সমাধান করতে পারেন। অ্যাপ্লিকেশন বিকাশে, লগিং প্রায়ই উপেক্ষা করা হয়, তবে এটি একটি শক্তিশালী এবং পর্যবেক্ষণযোগ্য সিস্টেম তৈরির একটি গুরুত্বপূর্ণ উপাদান। সঠিক লগিং অনুশীলনগুলি আপনার অ্যাপ্লিকেশনটির দৃশ্যমানতা বাড়াতে পারে, এর অভ্যন্তরীণ কাজগুলি সম্পর্কে আপনার বোঝার গভীরতা এবং সামগ্রিক অ্যাপ্লিকেশন স্বাস্থ্যের উন্নতি করতে পারে। ডিফল্ট লগিং আপনার অ্যাপ্লিকেশনের এন্ট্রি পয়েন্টগুলিতে ডিফল্ট লগিং প্রক্রিয়া অন্তর্ভুক্ত করা অত্যন্ত উপকারী। এই স্বয়ংক্রিয় লগিং প্রয়োজনীয় মিথস্ক্রিয়া ক্যাপচার করতে পারে এবং সম্ভাব্যভাবে এন্ট্রি পয়েন্টের আর্গুমেন্ট অন্তর্ভুক্ত করতে পারে। যাইহোক, সতর্ক থাকা অত্যন্ত গুরুত্বপূর্ণ কারণ পাসওয়ার্ডের মতো সংবেদনশীল তথ্য লগ করা গোপনীয়তা এবং নিরাপত্তা ঝুঁকির কারণ হতে পারে। কমন এন্ট্রি পয়েন্ট : ইনকামিং অনুরোধ এবং প্রতিক্রিয়া সম্পর্কে বিস্তারিত লগ করুন এপিআই এন্ডপয়েন্ট : লগ জব স্টার্ট পয়েন্ট, এক্সিকিউশন বিশদ এবং ফলাফল ব্যাকগ্রাউন্ড জবস : অ্যাসিঙ্ক্রোনাস ইভেন্ট এবং সম্পর্কিত মিথস্ক্রিয়াগুলির পরিচালনা লগ করুন অ্যাসিঙ্ক ইভেন্টস ব্যাপক লগিং আপনার অ্যাপ্লিকেশানের প্রতিটি উল্লেখযোগ্য পদক্ষেপ অবশ্যই একটি লগ এন্ট্রি তৈরি করবে, বিশেষ করে সেই ক্রিয়াগুলি যা এর অবস্থা পরিবর্তন করে। এই সম্পূর্ণ লগিং পদ্ধতিটি আপনার অ্যাপ্লিকেশনের স্বাস্থ্য এবং কার্যকারিতা সম্পর্কে একটি স্বচ্ছ দৃষ্টিভঙ্গি প্রদান করে সমস্যাগুলি উদ্ভূত হলে দ্রুত সনাক্তকরণ এবং সমাধানের চাবিকাঠি। লগিং এ ধরনের অধ্যবসায় সহজ নির্ণয় এবং রক্ষণাবেক্ষণ নিশ্চিত করে। উপযুক্ত লগ স্তর নির্বাচন করা আপনার অ্যাপ্লিকেশন দ্বারা উত্পন্ন বিপুল পরিমাণ ডেটা পরিচালনা এবং ব্যাখ্যা করার জন্য উপযুক্ত লগ স্তরগুলি গ্রহণ করা অত্যন্ত গুরুত্বপূর্ণ৷ লগগুলিকে তাদের তীব্রতা এবং প্রাসঙ্গিকতার উপর ভিত্তি করে শ্রেণীবদ্ধ করে, আপনি নিশ্চিত করেন যে গুরুতর সমস্যাগুলি অবিলম্বে চিহ্নিত করা হয়েছে এবং সমাধান করা হয়েছে, যখন কম জরুরী তথ্য আপনার পর্যবেক্ষণ প্রচেষ্টাকে অপ্রতিরোধ্য না করে অ্যাক্সেসযোগ্য থাকে। লগ লেভেলগুলি কার্যকরভাবে ব্যবহার করার জন্য নীচে একটি নির্দেশিকা রয়েছে: স্তর বর্ণনা ও উদাহরণ গৃহীত ব্যবহার গ্রহনযোগ্য না ERROR মারাত্মক ঘটনা যা সিস্টেম অপারেশন বন্ধ করে দেয়। যেমন, ডাটাবেস সংযোগ হারিয়েছে জটিল সিস্টেম ত্রুটি অ-গুরুত্বপূর্ণ ত্রুটি, যেমন ব্যর্থ ব্যবহারকারী লগইন প্রচেষ্টা WARN একটি সমস্যা আছে কিন্তু সিস্টেম এক্সিকিউশন চালিয়ে যেতে পারে এবং অনুরোধকৃত অপারেশন সম্পূর্ণ করতে পারে সম্ভাব্য সমস্যা যা সমস্যার সৃষ্টি করে রুটিন অবস্থা পরিবর্তন INFO সাধারণ অ্যাপ্লিকেশন ফাংশনগুলির অন্তর্দৃষ্টি, যেমন ব্যবহারকারীর অ্যাকাউন্ট তৈরি বা ডেটা লেখা৷ রাজ্যের পরিবর্তন পরিবর্তন ছাড়া শুধুমাত্র পঠন অপারেশন DEBUG বিস্তারিত ডায়াগনস্টিক তথ্য, যেমন প্রক্রিয়া শুরু/শেষ লগিং প্রক্রিয়ার পদক্ষেপগুলি সিস্টেমের অবস্থা পরিবর্তন করে না রুটিন অবস্থা পরিবর্তন বা উচ্চ ফ্রিকোয়েন্সি অপারেশন TRACE পদ্ধতি এন্ট্রি/প্রস্থান সহ সবচেয়ে বিস্তারিত স্তর একটি প্রক্রিয়ার প্রবাহ এবং বিবরণ বোঝা সংবেদনশীল তথ্য লগিং কি আইডি লগ করতে হবে - অনুক্রমিক পদ্ধতি ডেটাবেস ডেটাতে লগ ইনফরমেশন লিঙ্ক করার জন্য সরাসরি জড়িত সত্তার আইডি সহ আপনার অ্যাপ্লিকেশনে লগিং ক্রিয়াকলাপগুলি গুরুত্বপূর্ণ। একটি শ্রেণীবিন্যাস পদ্ধতি আপনাকে আপনার অ্যাপ্লিকেশনের একটি নির্দিষ্ট অংশের সাথে সংযুক্ত সমস্ত লগগুলিকে তাদের মূল গোষ্ঠী বা বিভাগের সাথে লিঙ্ক করে দ্রুত খুঁজে পেতে সহায়তা করে৷ উদাহরণস্বরূপ, একটি বার্তা পাঠাতে ব্যর্থ হলে শুধুমাত্র একটি চ্যাটের আইডি লগ করার পরিবর্তে, আপনার চ্যাট রুমের আইডি এবং এটি যে কোম্পানির অন্তর্ভুক্ত সেটিও লগ করা উচিত৷ এইভাবে, আপনি আরও প্রসঙ্গ লাভ করতে পারবেন এবং সমস্যাটির বিস্তৃত প্রভাব দেখতে পাবেন। উদাহরণ লগ এন্ট্রি: Failed to send the message - chat=$roomId, chatRoomId=chatRoomId, company=$companyId উৎপাদন লগের উদাহরণ শ্রেণীবিন্যাস পদ্ধতি ব্যবহার করার সময় উত্পাদন লগগুলি কীভাবে দেখতে পারে তার একটি উদাহরণ নীচে দেওয়া হল: ধারাবাহিকতা এবং মানককরণ স্ট্যান্ডার্ড উপসর্গ সমস্ত দল জুড়ে লগ ফরম্যাট মানক করা আপনার লগগুলি পড়া এবং বোঝার জন্য অনেক সহজ করে তুলতে পারে। এখানে বিবেচনা করার জন্য কিছু প্রমিত উপসর্গ রয়েছে: কিছু করতে শুরু করে কিছু করতে ব্যর্থ কিছু একটা করা শেষ কিছু করা এড়িয়ে গেছে কিছু করার পুনরায় চেষ্টা করুন পরিবর্তনশীল মান আলাদাভাবে লগ করুন লগ বার্তার মূল অংশ থেকে পরিবর্তনশীল নাম এবং মানগুলি আলাদা করা বেশ কয়েকটি সুবিধা দেয়: নির্দিষ্ট তথ্য ফিল্টার করা এবং খুঁজে পাওয়া সহজ করে তোলে লগ অনুসন্ধান এবং পার্সিং সহজ করে: লগ মেসেজ লেখার প্রক্রিয়াকে সোজা রাখে স্ট্রীমলাইন লগ মেসেজ ক্রিয়েশন: বড় মান লগ বার্তার পঠনযোগ্যতা ব্যাহত করবে না বার্তা বিশৃঙ্খলা প্রতিরোধ করে: উদাহরণ লগ বিন্যাস: Log message - valueName=value লগের উদাহরণ যা প্রস্তাবিত অনুশীলনগুলি ব্যবহার করে তাত্ত্বিক উদাহরণ এখানে আলোচনা করা সর্বোত্তম অনুশীলনগুলি অনুসরণ করে সুগঠিত লগ এন্ট্রিগুলির উদাহরণ রয়েছে: 2023-10-05 14:32:01 [INFO] Successful login attempt - userId=24543, teamId=1321312 2023-10-05 14:33:17 [WARN] Failed login attempt - userId=536435, teamId=1321312 এই উদাহরণগুলি দেখায়: : পরিষ্কার, সামঞ্জস্যপূর্ণ উপসর্গ যেমন "সফল লগইন প্রচেষ্টা" এবং "ব্যর্থ লগইন প্রচেষ্টা" লগগুলি বোঝা সহজ করে তোলে। স্ট্যান্ডার্ডাইজড লগ উপসর্গ : পরিবর্তনশীল নাম এবং মানগুলি লগ বার্তা থেকে পৃথক করা হয়েছে, স্পষ্টতা বজায় রাখা এবং অনুসন্ধানগুলিকে সরল করা। পৃথক করা পরিবর্তনশীল মান : কাঠামোগত বিন্যাস নিশ্চিত করে যে লগগুলি পড়তে এবং পার্স করা সহজ, দক্ষ সমস্যা সমাধান এবং পর্যবেক্ষণে সহায়তা করে। পঠনযোগ্যতা এবং সামঞ্জস্যতা উৎপাদন লগের উদাহরণ প্রস্তাবিত অনুশীলনগুলি ব্যবহার করার সময় উত্পাদন লগগুলি কীভাবে দেখতে পারে তার একটি উদাহরণ নীচে দেওয়া হল: ট্রেস আইডি একটি নির্দিষ্ট ব্যবহারকারীর ক্রিয়াকলাপের সাথে কার্যকরভাবে লগগুলিকে যুক্ত করার জন্য, একটি অন্তর্ভুক্ত করা অত্যন্ত গুরুত্বপূর্ণ বা এটিকে আপনার লগগুলিতে বলা হয়৷ আইডিটি সেই এন্ট্রি পয়েন্ট দ্বারা ট্রিগার হওয়া যুক্তি দ্বারা উত্পন্ন সমস্ত লগ জুড়ে সামঞ্জস্যপূর্ণ থাকা উচিত, ঘটনাগুলির ক্রমটির একটি স্পষ্ট দৃষ্টিভঙ্গি প্রদান করে। traceId correlationId বাস্তবায়ন উদাহরণ Datadog-এর মতো কিছু পর্যবেক্ষণ পরিষেবা বাক্সের বাইরে লগ গ্রুপিং প্রদান করে, এটি নিজেও প্রয়োগ করা যেতে পারে। স্প্রিং ব্যবহার করে একটি কোটলিন অ্যাপ্লিকেশনে, আপনি একটি হ্যান্ডলারইন্টারসেপ্টর ব্যবহার করে REST অনুরোধের জন্য একটি ট্রেস আইডি প্রয়োগ করতে পারেন। @Component class TraceIdInterceptor : HandlerInterceptor { companion object { private const val TRACE_ID = "traceId" } override fun preHandle(request: HttpServletRequest, response: HttpServletResponse, handler: Any): Boolean { val traceId = UUID.randomUUID().toString() MDC.put(TRACE_ID, traceId) return true } override fun afterCompletion(request: HttpServletRequest, response: HttpServletResponse, handler: Any, ex: Exception?) { MDC.remove(TRACE_ID) } } এই ইন্টারসেপ্টর প্রতিটি অনুরোধের জন্য একটি অনন্য তৈরি করে, অনুরোধের শুরুতে এটি এমডিসি-তে যোগ করে এবং অনুরোধ সম্পূর্ণ হওয়ার পরে এটি সরিয়ে দেয়। traceId ট্রেসআইডি সহ লগের উদাহরণ এই ধরনের লগ একত্রীকরণ বাস্তবায়ন করা আপনাকে নীচের উদাহরণের মতো লগ ফিল্টার করতে সক্ষম করবে লগগুলিতে UUID বনাম দীর্ঘ আইডি ব্যবহার করা অনেক সিস্টেমে, সংস্থাগুলি তাদের প্রাথমিক শনাক্তকারী হিসাবে বা আইডি ব্যবহার করতে পারে, যখন কিছু সিস্টেম বিভিন্ন উদ্দেশ্যে উভয় ধরনের ID ব্যবহার করতে পারে। লগিং উদ্দেশ্যে প্রতিটি প্রকারের প্রভাব বোঝা একটি জ্ঞাত পছন্দ করার জন্য অত্যন্ত গুরুত্বপূর্ণ। UUID Long এখানে বিবেচনা করার বিষয়গুলির একটি ভাঙ্গন রয়েছে: আইডিগুলি পড়া সহজ এবং যথেষ্ট ছোট, বিশেষ করে যদি সেগুলি পরিসরের উচ্চ প্রান্তে না হয়। পঠনযোগ্যতা: Long Long আইডিগুলি পুরো সিস্টেম জুড়ে স্বতন্ত্রতা প্রদান করে, যা আপনাকে আইডি সংঘর্ষের সমস্যার সম্মুখীন না হয়ে একটি আইডি ব্যবহার করে লগ অনুসন্ধান করতে সক্ষম করে। এখানে সংঘর্ষের অর্থ হল সম্পর্কহীন ডিবি টেবিল থেকে 2টি সত্তার একই আইডি থাকার সম্ভাবনা রয়েছে। অনন্য মান: UUID Long : যেসব সিস্টেমে এন্টিটি আইডি হিসেবে লং প্রাইমারি কী ব্যবহার করা হয়, সেখানে একটি এলোমেলো আইডি যোগ করা সাধারণত সহজ, এন্টিটি আইডি সহ বিতরণ করা সিস্টেমে লগিং করার জন্য বিশেষ করে আইডি থাকা চ্যালেঞ্জিং বা ব্যয়বহুল হতে পারে। সিস্টেমের সীমাবদ্ধতা UUID UUID Long লগগুলিতে ব্যবহৃত আইডিগুলির প্রকারের মধ্যে সামঞ্জস্যতা গুরুত্বপূর্ণ, অন্তত প্রতি সত্তার জন্য। যদি সিস্টেমটি ইতিমধ্যেই কিছু সত্তার জন্য লগ তৈরি করে এবং আপনি সেগুলিকে পরিবর্তন করার কথা বিবেচনা না করেন, তাহলে সত্তাটিকে শনাক্ত করার জন্য ইতিমধ্যে ব্যবহৃত প্রকারের সাথে লেগে থাকা ভাল৷ উভয় আইডি লগ করা একটি ট্রানজিশন পিরিয়ডের সময় বিবেচনা করা যেতে পারে, তবে স্থায়ীভাবে একাধিক আইডি থাকা অপ্রয়োজনীয়ভাবে লগগুলিকে বিশৃঙ্খল করবে। বিদ্যমান লগ: উপসংহার কার্যকর পরিষেবা পর্যবেক্ষণের জন্য সঠিক লগিং অনুশীলন অপরিহার্য। ব্যাপক লগিং, উপযুক্ত লগ লেভেল, ট্রেস আইডি, এবং স্ট্যান্ডার্ডাইজড লগ ফরম্যাটগুলি অন্তর্ভুক্ত করে, আপনি আপনার অ্যাপ্লিকেশনগুলি নিরীক্ষণ এবং সমস্যা সমাধানের আপনার ক্ষমতা উল্লেখযোগ্যভাবে উন্নত করতে পারেন। এই অনুশীলনগুলি আপনার লগগুলির স্বচ্ছতা এবং ধারাবাহিকতাকে উন্নত করে, সমস্যাগুলি দ্রুত নির্ণয় এবং সমাধান করা সহজ করে তোলে। এই পোস্টটি পড়ার জন্য সময় দেওয়ার জন্য আপনাকে ধন্যবাদ!