লগিংয়ের স্তরগুলি - লগব্যাক - লগ স্তরগুলি নির্ধারণের জন্য থাম্বের নিয়ম


258

আমি আমার বর্তমান প্রকল্পে লগব্যাক ব্যবহার করছি ।

এটি লগিংয়ের ছয়টি স্তর সরবরাহ করে: ট্র্যাক ডিবাগ ইনফও সতর্কতা অফ বন্ধ

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

আমি প্রতিটি লগিং স্তরের জন্য আরও উদাহরণ সহ উত্তরগুলির প্রশংসা করব।


3
আসলে সেই স্তরগুলি জাভা (এসএলএফ 4 জে) জন্য সিম্পল লগিং ফ্যাসাদ দ্বারা সংজ্ঞায়িত করা হয় , একটি লগিং বাস্তবায়নের সামনে ইন্টারফেসগুলির সেটটি একটি ফলক হিসাবে লক্ষ্য করা যায়। লগব্যাক এমন বাস্তবায়ন।
বাসিল বাউরক

উত্তর:


467

আমি বেশিরভাগ বড় আকারের, উচ্চ প্রাপ্যতা ধরণের সিস্টেমগুলি তৈরি করি, সুতরাং আমার উত্তরটি প্রোডাকশন সাপোর্টের দৃষ্টিকোণ থেকে এটি দেখার দিকে পক্ষপাতদুষ্ট; যা বলেছিল, আমরা মোটামুটি নিম্নলিখিত হিসাবে নিযুক্ত করি:

  • ত্রুটি : সিস্টেমটি সঙ্কটে রয়েছে, গ্রাহকরা সম্ভবত ক্ষতিগ্রস্থ হচ্ছে (বা শীঘ্রই হবে) এবং এই সমস্যার সমাধান সম্ভবত মানুষের হস্তক্ষেপ প্রয়োজন। "2am বিধি" এখানে প্রযোজ্য- আপনি যদি কল এ থাকেন তবে এই অবস্থাটি ঘটে যদি আপনি কি 2am এ জাগ্রত হতে চান? যদি হ্যাঁ হয়, তবে এটি "ত্রুটি" হিসাবে লগ করুন।

  • সতর্কতা : একটি অপ্রত্যাশিত প্রযুক্তিগত বা ব্যবসায়িক ঘটনা ঘটেছে, গ্রাহকরা প্রভাবিত হতে পারে, তবে সম্ভবত কোনও তাত্ক্ষণিকভাবে মানুষের হস্তক্ষেপের প্রয়োজন নেই। কলে লোকজনকে তাত্ক্ষণিকভাবে ডাকা হবে না, তবে সমর্থন কর্মীরা প্রভাব কী তা বোঝার জন্য এই বিষয়গুলি তত্ক্ষণাত পর্যালোচনা করতে চান। মূলত যে কোনও সমস্যা যা ট্র্যাক করা দরকার তবে তাত্ক্ষণিক হস্তক্ষেপের প্রয়োজন হতে পারে না।

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

  • ডিবাগ : "তথ্য" কেটে দেয় না এমন সবকিছু সম্পর্কে ... সিস্টেমের মধ্য দিয়ে প্রবাহ ট্র্যাকিং এবং সমস্যাগুলি বিচ্ছিন্নকরণে বিশেষত যে কোনও বার্তা সহায়ক, বিশেষত উন্নয়ন এবং QA পর্যায়ের সময়গুলি। আমরা বেশিরভাগ অ-তুচ্ছ পদ্ধতিতে প্রবেশের / প্রস্থান করার জন্য এবং আকর্ষণীয় ইভেন্টগুলি এবং পদ্ধতির অভ্যন্তরে সিদ্ধান্তের পয়েন্ট চিহ্নিত করার জন্য "ডিবাগ" স্তরের লগগুলি ব্যবহার করি।

  • ট্রেস : আমরা এটি প্রায়শই ব্যবহার করি না, তবে এটি অত্যন্ত বিস্তৃত এবং সম্ভাব্য উচ্চ পরিমাণের লগগুলির জন্য যা আপনি সাধারণত বিকাশের সময় সাধারণত সক্ষম করতে চান না। উদাহরণগুলির মধ্যে রয়েছে একটি পূর্ণ বস্তুর শ্রেণিবিন্যাস ডাম্প করা, বড় লুপের প্রতিটি পুনরাবৃত্তির সময় কিছু স্টেট লগ করা ইত্যাদি include

সঠিক লগ স্তরগুলি বেছে নেওয়ার চেয়ে বা ততোধিক গুরুত্বপূর্ণ হ'ল লগগুলি অর্থবোধক এবং প্রয়োজনীয় প্রসঙ্গটি নিশ্চিত করছে। উদাহরণস্বরূপ, আপনি প্রায় সবসময় লগগুলিতে থ্রেড আইডি অন্তর্ভুক্ত করতে চাইবেন যাতে প্রয়োজনে আপনি একক থ্রেড অনুসরণ করতে পারেন। আপনি থ্রেডে ব্যবসায়িক তথ্য (যেমন ব্যবহারকারীর আইডি) সংযুক্ত করার জন্য একটি পদ্ধতিও নিয়োগ করতে চাইতে পারেন যাতে এটি লগ হয়। আপনার লগ বার্তায়, বার্তাটি কার্যকর হতে পারে তা নিশ্চিত করার জন্য আপনি পর্যাপ্ত তথ্য অন্তর্ভুক্ত করতে চাইবেন। "ফাইলনোটফাউন্ড ব্যতিক্রম ধরা পড়ে" এর মতো একটি লগ খুব বেশি সহায়ক নয়। একটি আরও ভাল বার্তা হ'ল "কনফিগার ফাইলটি খোলার চেষ্টা করার সময় ফাইলনটফাউন্ড ব্যতিক্রম ধরা পড়ে: /usr/local/app/somefile.txt। ব্যবহারকারীআইডি = 12344।"

এখানে বেশ কয়েকটি লগিং গাইড রয়েছে ... উদাহরণস্বরূপ, এখানে জেসিএল (জাকার্তা কমন্স লগিং) এর সম্পাদিত স্নিপেট রয়েছে :

  • ত্রুটি - অন্যান্য রানটাইম ত্রুটি বা অপ্রত্যাশিত শর্ত। এগুলি স্থিতি কনসোলে তত্ক্ষণাত দৃশ্যমান হবে বলে আশা করুন।
  • সতর্কতা - অবহেলিত এপিআই এর ব্যবহার, এপিআই এর দুর্বল ব্যবহার, 'প্রায়' ত্রুটি, অন্যান্য রানটাইম পরিস্থিতি যা অনাকাঙ্ক্ষিত বা অপ্রত্যাশিত, তবে অগত্যা "ভুল" নয়। এগুলি স্থিতি কনসোলে তত্ক্ষণাত দৃশ্যমান হবে বলে আশা করুন।
  • তথ্য - আকর্ষণীয় রানটাইম ইভেন্ট (স্টার্টআপ / শাটডাউন)। এগুলি কনসোলে তত্ক্ষণাত দৃশ্যমান হওয়ার প্রত্যাশা করুন, তাই রক্ষণশীল হন এবং সর্বনিম্ন রাখুন।
  • ডিবাগ - সিস্টেমের মাধ্যমে প্রবাহ সম্পর্কে বিস্তারিত তথ্য। এগুলি কেবল লগগুলিতে লেখা হবে বলে আশা করি।
  • ট্রেস - আরও বিস্তারিত তথ্য। এগুলি কেবল লগগুলিতে লেখা হবে বলে আশা করি।

1
মজাদার, সুতরাং আমি ধরেই নিই যে আপনি যদি API এর অনুরোধগুলি লগ করছেন এবং কোনও ব্যবহারকারী কোনও পরামিতি বিন্যাস (IllegalArgumentException) দিয়ে ভুল করে থাকেন, তবে এটি কোনও INFO স্তর, তাই না?
এমিলিও

51

আমার ধারণা, আমি মনে করি একটি অপারেশন পয়েন্টের চেয়ে উন্নয়নের থেকে আরও বেশি আগমন ঘটে:

  • ত্রুটির অর্থ হল যে কোনও কাজ সম্পাদন সম্পন্ন করা যায়নি; একটি ইমেল প্রেরণ করা যায়নি, একটি পৃষ্ঠা রেন্ডার করা যায়নি, কিছু ডেটাবেস ডাটাবেসে সংরক্ষণ করা যায়নি, এরকম কিছু। কিছু স্পষ্টতই ভুল হয়েছে।
  • সতর্কতার অর্থ হ'ল অপ্রত্যাশিত কিছু ঘটেছে, তবে সেই মৃত্যুদন্ড কার্যকর হতে পারে, সম্ভবত একটি অবনমিত মোডে; একটি কনফিগারেশন ফাইল অনুপস্থিত ছিল তবে ডিফল্ট ব্যবহার করা হয়েছিল, দামকে নেতিবাচক হিসাবে গণনা করা হয়েছিল, সুতরাং এটি শূন্যে আটকে দেওয়া হয়েছিল etc. খুব শীঘ্রই একটি ত্রুটি।
  • তথ্য মানে সাধারণ তবে উল্লেখযোগ্য কিছু ঘটেছে; সিস্টেমটি শুরু হয়েছিল, সিস্টেমটি বন্ধ হয়ে গেছে, দৈনিক ইনভেন্টরি আপডেটের কাজ চলছে ইত্যাদি these এগুলির একটি নিয়মিত টরেন্ট থাকা উচিত নয়, অন্যথায় পড়ার মতো খুব বেশি কিছু নেই।
  • ডিবাগের অর্থ হ'ল স্বাভাবিক ও তুচ্ছ কিছু ঘটেছিল; একটি নতুন ব্যবহারকারী সাইটে এসেছিল, একটি পৃষ্ঠা উপস্থাপন করা হয়েছিল, একটি আদেশ নেওয়া হয়েছিল, একটি দাম আপডেট করা হয়েছিল। এটি তথ্য থেকে বাদ দেওয়া জিনিস কারণ এটির খুব বেশি পরিমাণে থাকবে।
  • ট্রেস এমন একটি জিনিস যা আমি আসলে ব্যবহার করি নি।

18

এটিও স্পর্শকাতরভাবে বুঝতে সাহায্য করতে পারে, কোনও নির্দিষ্ট স্তরে কোনও লগিংয়ের অনুরোধ (কোড থেকে) এর ফলে এটি কার্যকরভাবে কার্যকর লগিং স্তরের যে কোনও স্থাপনার সাথে কনফিগার করা হয়েছে তার ফলস্বরূপ এটি লগ হওয়ার ফল দেয় understand সিদ্ধান্ত নিন কি কার্যকর স্তর আপনি অন্যান্য উত্তরসমূহ এখান থেকে সঙ্গে আপনি স্থাপনার কনফিগার করতে, এবং তারপর কিনা দেখতে একটি নির্দিষ্ট লগিং এই পড়ুন চান অনুরোধ আপনার কোড থেকে আসলে তারপর লগ করা হবে ...

উদাহরণস্বরূপ :

  • "WARN এ লগ করা লগিং কোড লাইনটি কি আমার স্থাপনার উপর ERROR এর সাথে কনফিগার করা লগইন হবে?" টেবিলটি বলে, না।
  • "WARN এ লগ করা লগিং কোড লাইনটি কি আমার স্থাপনার ডিইবিইউজি-র সাথে কনফিগার করা আসলে লগ হবে?" টেবিলটি বলে, হ্যাঁ

লগব্যাক ডকুমেন্টেশন থেকে :

আরও গ্রাফিক উপায়ে, নির্বাচন নিয়ম কীভাবে কাজ করে তা এখানে। নিম্নলিখিত সারণীতে উল্লম্ব শিরোনাম পি দ্বারা মনোনীত লগিংয়ের অনুরোধের স্তরটি দেখায়, যখন অনুভূমিক শিরোনাম লগের কার্যকর স্তরটি Q দ্বারা মনোনীত করে দেখায়। সারিগুলির ছেদ (স্তরের অনুরোধ) এবং কলামগুলি (কার্যকর স্তর) হ'ল বুলিয়ান যা মৌলিক নির্বাচনের নিয়ম থেকে আসে। এখানে চিত্র বর্ণনা লিখুন

সুতরাং একটি কোড লাইন যা লগিংয়ের জন্য অনুরোধ করে তা কেবল তখনই লগ হয়ে যায় যদি তার মোতায়েনের কার্যকর লগিং স্তরটি ওই কোড লাইনের অনুরোধের তীব্রতার চেয়ে কম বা সমান হয় ।


8

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

  • ত্রুটি - এই উপাদানটির একটি ব্যর্থতা রয়েছে এবং কারণটি অভ্যন্তরীণ বলে মনে করা হচ্ছে (কোনও অভ্যন্তরীণ, হাতছাড়া সরঞ্জামের ব্যতিক্রম, এনক্যাপসুলেটেড নির্ভরতার ব্যর্থতা ... উদাহরণস্বরূপ ডাটাবেস, REST উদাহরণ হতে পারে এটি নির্ভরতা থেকে 4 xxx ত্রুটি পেয়েছে)। বিছানা থেকে আমাকে (এই উপাদানটির রক্ষণাবেক্ষণকারী) পান।

  • সতর্কতা - এই উপাদানটি একটি নির্ভরশীল উপাদান দ্বারা সৃষ্ট বলে বিশ্বাস করা ব্যর্থ হয়েছে (REST উদাহরণটি নির্ভরতা থেকে 5XX স্থিতি হবে)। বিছানা থেকে এই উপাদানটির রক্ষণাবেক্ষণকারীদের পান।

  • তথ্য - আমরা অপারেটরের কাছে পেতে চাই অন্য যে কোনও কিছু। যদি আপনি সুখী পথগুলিতে লগ করার সিদ্ধান্ত নেন তবে আমি উল্লেখযোগ্য ক্রিয়াকলাপের জন্য 1 লগ বার্তা সীমাবদ্ধ করার প্রস্তাব দিই (যেমন আগত http অনুরোধ)।

সমস্ত লগ বার্তাগুলির জন্য দরকারী প্রসঙ্গে লগ করতে ভুলবেন না (এবং "ত্রুটি কোডগুলি" র্যামগুলি না করে বার্তাগুলিকে মানব পাঠযোগ্য / দরকারী করে তুলতে অগ্রাধিকার দিন)

  • DEBUG (এবং নীচে) - মোটেও ব্যবহার করা উচিত নয় (এবং অবশ্যই উত্পাদনে নয়)। বিকাশে আমি টিডিডি এবং ডিবাগিংয়ের সংমিশ্রণটি ব্যবহার করার পরামর্শ দেব (যেখানে প্রয়োজন সেখানে) লগ স্টেটমেন্ট সহ দূষণকারী কোডের বিপরীতে। উত্পাদনে, উপরের আইএনএফও লগিং, অন্যান্য মেট্রিকগুলির সাথে মিলিত পর্যাপ্ত হওয়া উচিত।

উপরের লগিং স্তরগুলিকে কল্পনা করার একটি দুর্দান্ত উপায় হ'ল প্রতিটি উপাদানগুলির জন্য মনিটরিং স্ক্রিনগুলির একটি সেট কল্পনা করা। যখন সমস্ত ভাল চলছে তখন তারা সবুজ হয়ে উঠবে, যদি কোনও উপাদান একটি সতর্কতা লগ করে তবে এটি কমলা (অ্যাম্বার) হয়ে যাবে যদি কোনও কিছুতে ত্রুটি লগ হয় তবে তা লাল হয়ে যাবে।

কোনও ঘটনার ক্ষেত্রে আপনার একটি (মূল কারণ) উপাদানটি লাল হওয়া উচিত এবং প্রভাবিত সমস্ত উপাদান কমলা / অ্যাম্বার হওয়া উচিত।


2
মনিটরের
সাদৃশ্যগুলির

3

অন্যান্য উত্তরের জন্য আলাদা নয়, আমার কাঠামোর প্রায় একই স্তরের রয়েছে:

  1. ত্রুটি: ডেটাবেস সংযোগের সময়সীমা সমাপ্তির মতো অ্যাপ্লিকেশনটিতে সমালোচনামূলক লজিক্যাল ত্রুটি। যে জিনিসগুলি নিকট ভবিষ্যতে বাগ-ফিক্সের জন্য কল করে
  2. সতর্কতা: তাত্পর্যপূর্ণ নয়, তবে মনোযোগ দেওয়ার জন্য স্টাফ। অনুরোধ করা পৃষ্ঠার মতো পাওয়া যায় নি
  3. তথ্য: ফাংশন / পদ্ধতিগুলিতে প্রথম লাইনে ব্যবহৃত হয় এমন পদ্ধতি দেখাতে যা ডাকা হয়েছে বা একটি ধাপ ঠিক হয়ে গেছে, যেমন সন্নিবেশ সন্ধান করা হয়েছে
  4. লগ: যুক্তি তথ্য, যেমন একটি বিবৃতি ফলাফল
  5. ডিবাগ: স্থায়ীভাবে দেখার জন্য প্রাসঙ্গিক ভেরিয়েবল সামগ্রী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.