ব্যতিক্রমগুলির জন্য ত্রুটি লগিং পরিচালনা করার সর্বোত্তম উপায় কী?


13

ভূমিকা

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

এবং যদি আপনার প্রচুর সিস্টেম থাকে তবে আপনি এই তথ্যটি প্রায় ডটড রাখতে চান না - এর জন্য একটি একক কেন্দ্রীভূত জায়গা রাখা ভাল।

সহজ স্তরে, যা প্রয়োজন তা হ'ল একটি ইনক্রিমেন্টিং আইডি এবং ত্রুটির বিশদগুলির ক্রমিক ডাম্প। (এবং সম্ভবত "কেন্দ্রীভূত স্থান" একটি ইমেল ইনবক্স হচ্ছে।)

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

- আমি কি করার জন্য এখানে উল্লেখ করছি কোড পর্যায়ের ত্রুটি / একটি দূরবর্তী সিস্টেম দ্বারা ব্যতিক্রম লগ-ইন করা হয় না 'মানুষের ভিত্তিক "ইস্যু ট্র্যাকিং, জির, ট্র্যাক, ইত্যাদি সঙ্গে সম্পন্ন যেমন।


প্রশ্নাবলি

আমি বিকাশকারীদের কাছ থেকে চিন্তা সন্ধান করছি যারা এই ধরণের সিস্টেম ব্যবহার করেছেন, বিশেষত:

  • প্রয়োজনীয় বৈশিষ্ট্যগুলি কী কী আপনি ছাড়া না করতে পারেন?
  • এমন বৈশিষ্ট্যগুলি কী থাকতে পারে যা সত্যিকার অর্থে আপনার সময় সাশ্রয় করে?
  • কোন বৈশিষ্ট্যগুলি একটি ভাল ধারণা বলে মনে হতে পারে তবে বাস্তবে এটি কার্যকর নয়?

উদাহরণস্বরূপ, আমি বলব "ডুপ্লিকেটগুলি দেখান" ফাংশন যা কোনও ত্রুটির একাধিক ঘটনা চিহ্নিত করে ('গুরুত্বপূর্বক' বিশদটি যে আলাদা হতে পারে তা নিয়ে চিন্তা না করে) বেশ প্রয়োজনীয় pretty
"এই ত্রুটির জন্য [জীরা / ইত্যাদি] তে একটি সমস্যা তৈরি করতে" একটি বোতামটি একটি ভাল সময়-বাঁচার মতো মনে হচ্ছে।

কেবল পুনরায় পুনরাবৃত্তি করার জন্য, আমি এরপরে এমন লোকদের ব্যবহারিক অভিজ্ঞতা যা পরে এই বৈশিষ্ট্যটি কেন দুর্দান্ত / ভয়ঙ্কর হয় তার সাথে ব্যাক-আপ করা উচিত such
(আপনি যদি যাইহোক তত্ত্বটিতে যাচ্ছেন তবে খুব কমপক্ষে আপনার উত্তরটিকে এরূপ হিসাবে চিহ্নিত করুন))


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

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

আমি ব্যতিক্রম লগারগুলি দেখেছি যা স্ট্রিং.ফোর্মেটে (সি #) :) এ ব্যতিক্রম। লগইন সরল রাখুন, বেশি ঝুঁকিমুক্ত, গতিশীল নয় (যেমন আপনি কোনও ব্যতিক্রম লগ করার চেষ্টা করছেন এমন কোনও এক্সএমএল ফাইলকে পার্স করবেন না)। পারলে ত্রুটি লগিংয়ে গতিশীলতা এড়িয়ে চলুন। আপনি যদি কোনও এক্সএমএল ফাইলে স্টাফ কনফিগার করেছেন তবে আমি মনে করি যে রান-টাইমে সেই কনফিগারেশন ফাইলটিকে পার্স করার পরিবর্তে এটির (সলিড) ভিত্তিতে কিছু প্রকৃত কোড উত্পন্ন করা ভাল, যখন আপনি কোনও ত্রুটির প্রতিবেদন করার মাঝখানে রয়েছেন (গতিশীল) )। যাইহোক এটি আমার অভিজ্ঞতা ছিল। আপনি লগিংয়ের জন্য একটি বি বি চান করতে পারেন - যদি অভিনব আউটপুট ব্যর্থ হয়, সহজ লগ করুন
কাজের

উত্তর:


5

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

আমি আপনাকে মাইক্রোসফ্ট এন্টারপ্রাইজ লাইব্রেরি এবং লগ 4 নেট পরীক্ষা করার পরামর্শ দিচ্ছি

লগ 4 নেট এর কয়েকটি বৈশিষ্ট্য

  • একাধিক ফ্রেমওয়ার্কের জন্য সমর্থন
  • একাধিক লগিং লক্ষ্যগুলিতে আউটপুট
  • শ্রেণিবদ্ধ লগিং আর্কিটেকচার
  • এক্সএমএল কনফিগারেশন
  • ডায়নামিক কনফিগারেশন
  • লগিং প্রসঙ্গ
  • প্রমাণিত স্থাপত্য
  • মডুলার এবং এক্সটেনসিবল ডিজাইন flex নমনীয়তার সাথে উচ্চ কার্যকারিতা

1
একটি ভাল লগার আপনাকে আপনার ত্রুটিগুলি আপনার পছন্দের অধ্যবসায় (ইমেল, ডিবি, ফাইল, ইত্যাদি) এড়াতে দেয়।
কেন হেন্ডারসন

1

ডাটাবেস অ্যাপ্লিকেশনগুলির ক্ষেত্রে, কিছু ধরণের আইডি (যেমন <TABLE>:<PrimaryKeyID>) আপনাকে ব্যতিক্রম ক্যাপচারের সুযোগের সাথে সম্পর্কিত ডাটাবেসে রেকর্ডগুলি ট্র্যাক করতে দেয়।

ব্যতিক্রম হ্যান্ডলার থেকে, অ্যাপলিকেশনটির মধ্যে একটি ডাটাবেস টেবিলের মধ্যে আইডি রেকর্ড করে আমি ওরাকল এবং পিএল / এসকিউএল দিয়ে এটি করেছি।


কমপক্ষে সারণী এবং রেকর্ড (গুলি) প্রক্রিয়াকরণে রেকর্ড করা অবশ্যই ভাল। আরও ভাল অবশ্যই অবশ্যই চেষ্টা করা এসকিউএল স্টেটমেন্ট (এবং কোনও প্যারামিটার) রয়েছে।
পিটার বুফটন

1

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

আমার ক্ষেত্রে, আমি কিছু ছোট অ্যাপ্লিকেশন এবং এসকিউএল স্ক্রিপ্ট তৈরি করেছি যা কিছু জিনিস সহজ করে তুলেছে। আমার পছন্দসই কিছু জিনিস এখানে দেওয়া হল:

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

0

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

# Create socket.
my $sock = IO::Socket::INET->new(
    Proto       => 'udp',
    PeerAddr    => $bcastaddr,
    Broadcast   => 1,
) or die "Can't create socket ($bcastaddr): $!";

while (<>) {
    chomp;
    unless (/File\ does\ not\ exist:/) {
        $sock->send("$eventtype:$_") or warn "Can't send: $!";
    }
}

তারপরে কোনও বিশ্লেষক গ্রেপ্তার করতে পারেন যে সে কী দেখতে চায়।


3
'ফায়ারহস' কী তা নিশ্চিত নন? আজ ডিস্কের ক্ষমতা দেওয়া, আমি আশা করি ত্রুটিগুলি এত সাধারণ না ছিল যে লগের আকারটি একটি সমস্যা হয়ে দাঁড়াবে।
পিটার বুফটন

0

আমাদের অ্যাপ্লিকেশনগুলিতে ত্রুটি পর্যবেক্ষণ থেকে আমি কিছু জিনিস শিখেছি:

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

লগ 4 নেট এর জন্য আমি দুর্দান্ত ফলাফল পেয়েছি কারণ এটি একাধিক স্থানে লগইন করা এবং লগিং কনফিগারেশনে পরিবর্তনও সহজ করে তোলে।


0

এলএসএএসপিএন নেট অ্যাপ্লিকেশনগুলির জন্য ওপেন সোর্স ত্রুটি লগিং সিস্টেম এবং একটি বিদ্যমান সিস্টেমে (নিউগেট http://nuget.codeplex.com/ ব্যবহার করে ) দ্রুত এবং সহজেই যুক্ত করা যায়। এটি বিভিন্ন ব্যাকএন্ড এবং বিজ্ঞপ্তি ফাংশন সমর্থন করে।

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

http://code.google.com/p/elmah/

ELMAH (ত্রুটি লগিং মডিউল এবং হ্যান্ডলারগুলি) হ'ল একটি অ্যাপ্লিকেশন-বিস্তৃত ত্রুটি লগিং সুবিধা যা সম্পূর্ণ প্লাগযোগ্য। এটি কোনও চলমান এএসপি.এনইটি ওয়েব অ্যাপ্লিকেশন, এমনকি কোনও মেশিনে সমস্ত এএসপি.এনইটি ওয়েব অ্যাপ্লিকেশনগুলিতে গতিশীলভাবে যুক্ত করা যেতে পারে , পুনরায় সংকলন বা পুনঃ-স্থাপনার কোনও প্রয়োজন ছাড়াই।

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

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

ELMAH অবিশ্বাস্য। যদি httpcontext NULL ==> বুম হয়
Quandary

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