লগিং: কেন এবং কী? [বন্ধ]


39

লগিংয়ের উল্লেখযোগ্য ব্যবহার করে এমন প্রোগ্রাম আমি কখনও লিখিনি। ব্যতিক্রম ঘটলে আমি সর্বাধিক করেছি স্ট্যাকের চিহ্নগুলি ক্যাপচার করা।

আমি ভাবছিলাম, অন্য লোকেরা কতটা লগ করে? আপনি কী ধরনের প্রয়োগ লিখছেন তা নির্ভর করে? আপনি কি লগগুলি আসলে সহায়ক মনে করেন?

উত্তর:


24

কাজের জন্য আমি একটি অমূল্য সরঞ্জামে লগ ইন করে মূলত এম্বেড থাকা অ্যাপ্লিকেশনগুলি করেছি। নূন্যতম ত্রুটিগুলিতে কোডের লাইনে নির্দেশ করতে পর্যাপ্ত তথ্য দিয়ে লগ ইন করতে হবে। এর পরে, অ্যাপ্লিকেশন জুড়ে প্রধান ফাংশন পয়েন্ট হবে। অ্যাডমিনের মতো জিনিসগুলি মেশিনটি অ্যাক্সেস করে। আমরা এমন একটি সিস্টেম ব্যবহার করি যা আমাদের আরও ভার্বোজ লগিং সক্ষম করতে দেয়। এটি সাধারণত বিকাশকারী নির্দিষ্ট। বৈশিষ্ট্যটি পরীক্ষার সময় এটি বিকাশকারীকে সহায়তা করতে বা গ্রাহকের সমস্যা নির্ণয়ে সহায়তা করার জন্য ব্যবহৃত হতে পারে।

আমি বিকাশিত সমস্ত অ্যাপ্লিকেশনটিতে ব্যক্তিগতভাবে লগিং ব্যবহার করেছি। এটি সর্বদা একটি অ্যাপ্লিকেশন প্রবাহের আরও ভাল বোঝার দিকে পরিচালিত করে। বিশেষত যখন কোনও গ্রাহকের হাতে থাকে। আপনি কখনই তাদের ব্যবহারের কেস সীমাবদ্ধ করেন না (বিরল) against


19

আমি মনে করি না যে এটি প্রয়োগের ধরণের উপর নির্ভর করে: লগিং সমস্ত (অ-তুচ্ছ) অ্যাপ্লিকেশনগুলিতে কার্যকর useful অবশ্যই, আমি অনুমান, এটা হতে পারে আরো অন্যদের তুলনায় কিছু অ্যাপ্লিকেশন দরকারী, কিন্তু আমি এটা কখনও মনে করি না বেহুদা

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

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


9

লগিং সম্পাদনের দুটি কারণ রয়েছে:

  1. লক্ষণ
  2. নিরীক্ষা

অন্যদের দ্বারা ডায়াগনস্টিক লগিং ইতিমধ্যে আলোচনা করা হয়েছে এবং আমি বিষয়টি আরও বেশি বারণ করব না। আমি কেবল বলব যে কোনও লগ ব্যর্থ হলে কী ঘটে তা সম্পর্কে আপনার দৃ strongly়তার সাথে চিন্তা করা উচিত? আপনি কি অ্যাপ্লিকেশনটির মাধ্যমে একটি ব্যতিক্রম ছুঁড়ে ফেলার বা এটিকে অন্যভাবে পরিচালনা করার জন্য যথেষ্ট যত্নশীল? এটি একটি "এটি নির্ভর করে" তবে লগিং তথ্য স্তরের বার্তাগুলি সম্ভবত এড়ানো উচিত।

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

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


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

8

বেশিরভাগ সার্ভারের কাজগুলিতে লগইন করা অত্যন্ত গুরুত্বপূর্ণ, যেহেতু অ্যাডমিন সাধারণত জিনিসগুলি উপস্থিত হওয়ার সময় সেখানে থাকে না, তাই তাকে সত্য-সত্যতা যাচাই করতে হবে।

তবে, গুগলের এক লোক আমাকে একবার বলেছিল যে তাদের সার্ভার প্রক্রিয়াগুলি লগিং করে না; পরিবর্তে, তারা 'চালিত'; এর অর্থ হ'ল প্রতিটি প্রক্রিয়াতে হুক বা বন্দর রয়েছে (তিনি যান্ত্রিকগুলি নির্দিষ্ট করেন নি) যেখানে অন্যান্য প্রক্রিয়াগুলি প্যারামিটার এবং পরিসংখ্যান জিজ্ঞাসা করতে ল্যাচ করতে পারে। এটি সেইগুলি পর্যবেক্ষণ প্রক্রিয়া যা লগগুলিতে প্রচুর জিনিস সঞ্চয় করে, সুবিধাটি হ'ল তারা যে তথ্যগুলি পেয়েছে তা "কোনও ফাইল খুলবে না", "এটি লিখুন", "এটি আনুন"; তারা "45,453 ফাইলগুলি খুলুন", "পরিষেবা X এর 653 ক্লায়েন্ট", "কোয়ের ওয়াইয়ের জন্য 344 মিমি গড় প্রতিক্রিয়া" এর মতো জিনিসগুলি পান

অবশ্যই একটি ভিন্ন পদ্ধতির এবং আমি যেগুলি আমার সিস্টেমগুলিকে বেবিসিট করার সময় মনে রাখি one


4

আমি একটি উইনফর্ম এন-টাইার্ড অ্যাপ্লিকেশন থেকে এসেছি যা সমস্ত কিছু লগ ইন করে।

এটি খুব দরকারী ছিল না।

অবশ্যই, লগিং ব্যতিক্রমগুলি দুর্দান্ত; তবে আপনি যখন ক্লাবটির মেশিনে লগ করবেন যখন আপনি কেবলমাত্র দেব দলের ব্যতিক্রম ইমেল করতে পারেন?

লগিং তথ্য সহজেই একটি আসক্তিতে পরিণত হয় যার মান খুব কমই ন্যায়সঙ্গত হয়। প্রতিটি পরিস্থিতির জন্য যেখানে আপনি কৃতজ্ঞভাবে লগইন করতে পারেন, লক্ষ্যযুক্ত তথ্য সংগ্রহ করা এবং যেখানে আপনার প্রয়োজন সেখানে পাঠানো ভাল।


1
আপনার অ্যাপ্লিকেশন ক্রাশ হয়ে গেলে আপনি কি তাদের ইমেল করতে পারেন?
পেমদাস

2
ইমেল নিচে থাকলে কী হবে?

3
যে মেশিনটি চালু আছে তার যদি ইন্টারনেট সংযোগ না থাকে তবে কী হবে?
পেমদাস

2
আমি তা বিশ্বাস করি না, এ কারণেই আমি আপনাকে কঠিন সময় দিচ্ছি। আপনি মূলত বলেছিলেন যে সমস্ত লগকে দেব দলে ইমেল করা উচিত, যা প্রায়শই সম্ভব হয় না।
পেমদাস

3
@ পেমডাস এটি সহজ: আপনি যেখানে এটি করতে পারবেন, কেবল উইলি-নিলি সমস্ত কিছুতে লগইন করা এবং এটি কাউকে না পাঠানো ভাল। লগগুলি কেবল তখনই বোঝায় যে কোনও ব্যক্তি যদি নিয়মিত সেগুলি পরীক্ষা করে থাকে এবং কেবলমাত্র তারা লগ ইন করার জন্য কেবল দরকারী। প্রায়শই আমি দেখি যে বিকাশকারীরা সমস্ত কিছু লগ করে এবং এমনকি এটি দেখে না। লজ্জাজনক, সত্যই।
জর্জ স্টকার

4

ব্যতিক্রম তথ্য ক্যাপচার করা আবশ্যক কারণ এটি কিছুটা কার্যকর হতে পারে। তবে কখনও কখনও ব্যতিক্রম তথ্য যথেষ্ট নয় বিশেষত যদি অ্যাপ্লিকেশন ব্যবহারকারী / ক্লায়েন্ট যথাযথ তথ্যের সাথে ত্রুটি জানাতে না পারে।

লগিং কি কেবল ত্রুটির তথ্য ক্যাপচারের মধ্যে সীমাবদ্ধ?

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

প্রথমদিকে, আমি কতটা তাৎপর্যপূর্ণ হবে তা আমার ধারণা ছিল না। তবে স্পষ্টতই এটি অনেকগুলি ক্ষেত্রে (ডিবাগিং ব্যতীত) খুব সহায়ক:

  • ব্যবহারকারীর আচরণ বোঝা
  • নতুন বৈশিষ্ট্যের গ্রহণযোগ্যতা মূল্যায়ন
  • প্রারম্ভিক গ্রহণকারী, স্ক্যামার বা সম্ভাব্য গ্রাহকদের মধ্যে পার্থক্য করুন

আমি মনে করি, লগিং আরও তাৎপর্যপূর্ণ হয়ে উঠতে পারে যদি আমরা এতে পরিসংখ্যান সম্পর্কিত তথ্যগুলি খুঁজে বের করতে পছন্দ করি।


2

আমি এমন একটি সংস্থার বিকাশকারী যার পণ্য বিদেশে মোতায়েন রয়েছে। যখন কোনও সহায়তা দল কোনও সমস্যার সংজ্ঞা সম্পর্কে জিজ্ঞাসা করতে আসে, তখন রোগ নির্ণয়ের জন্য আমার একমাত্র সরঞ্জামগুলি হ'ল আমার লগ ফাইল এবং গ্রাহকের ডাটাবেসের একটি অনুলিপি। ডাটাবেস এবং আমার বিকাশের পরিবেশটি ব্যবহার করে আমার কাছে ভুলের কেস পুনরুত্পাদন করার সুযোগ রয়েছে, কারণ আমি আগত ডেটাগুলিকে আমার মডিউল এবং সম্পর্কিত ক্রিয়ায় লগইন করি। আমি যে তথ্য সংগ্রহ করি তার সাহায্যে যদি আমি ত্রুটিটি পুনরুত্পাদন করতে পারি তবে আমি এটি ডিবাগিং দিয়ে ঠিক করতে পারি। যদি আমার কোনও লগ ফাইল না থাকে তবে গ্রাহকের বা সমর্থন দলের কী কী ক্ষেত্রে (যার বিভ্রান্তির বড় সম্ভাবনা রয়েছে) কী ঘটবে তার বিবরণ নির্ভর করতে হবে।

দ্বিতীয়ত, লগিং আমাকে মোতায়েন করা সাইটে আমার মডিউলটির বাধাগুলি সনাক্ত করার সুযোগ দেয়, যেহেতু আমি নির্দিষ্ট ক্রিয়াগুলির তারিখ এবং সময় লগইন করি এবং তারপরে কোন ক্রিয়াটি কত সময় ব্যয় করে তা আমি একবারে দেখতে পারি।

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

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


2

অন্যান্য প্রোগ্রামের মাধ্যমে আপনি যে তথ্যটি পেতে পারেন না তার জন্য লগিং দরকারী:

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

দ্রষ্টব্য: আপনি কমপক্ষে TWO লগ ফাইল চান।

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

INFO এক সর্বদা চালু থাকে। যখন প্রয়োজন হয় তখন ডিইবিইউ চালু থাকে।

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

অতিরিক্ত মাইলের জন্য, সমস্ত ফাংশন কলগুলি জাভা সহ যে কোনও স্ট্যাক ট্রেসগুলিতে তাদের পরামিতিগুলি যুক্ত করুন

public void sendEmail(String sender, String recipient) {
try { 
...
} catch (Exception e) {
  throw new RuntimeException("sendEmail(sender="+sender+", recipient="+recipient+")");
}

এই পদ্ধতির ফলে প্যারামিটার মানগুলির সাথে আপনার কল স্ট্যাকটি মূলত উন্নত হয় এবং আপনি কেবল স্ট্যাক ট্রেসের সাহায্যে পরিস্থিতি বিশ্লেষণের অনুমতি দিতে পারেন এবং লগ ফাইলগুলি না দেখে।


"লগিং কোডটি লিখুন এমন প্রত্যাশা করে যে একদিন আপনার নিজের সমস্ত পরিস্থিতি লগ ফাইল হতে পারে এমন পরিস্থিতিটি ডিবাগ করতে পারে এবং সঠিকভাবে কাজটি করা বরখাস্ত হওয়া এবং প্রচারিত হওয়ার মধ্যে পার্থক্য হতে পারে" "
মারসি

1

আমি আরও সুপারিশ করব যে সমস্ত অ-তুচ্ছ অ্যাপ্লিকেশন মাল্টি-লেভেল লগিং নিয়োগ করে।

অন্যরা যে কারণে বলেছে, অ্যাপ্লিকেশনটিতে সমস্যা সমাধানের জন্য এটি একটি অমূল্য সরঞ্জাম।

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


1

এটি সম্ভবত আপনি যে ধরণের সিস্টেম তৈরি করছেন তার উপর নির্ভর করে।

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

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


1

লগিং সর্বদা দরকারী। তবে বাস্তবায়ন করার সময় সচেতন থাকুন যে আপনি লগগুলি পড়ছেন তা অগত্যা আপনার নয়। সম্ভবত এটি কোনও প্রকারের অ্যাডমিন, শেষ ব্যবহারকারী, গ্রাহক, সহায়তা দল, ...

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

প্রশাসকের দৃষ্টিকোণ থেকে আরেকটি বিষয়: লগ ঘূর্ণন সম্পর্কে চিন্তা করুন।

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