অ্যাপ্লিকেশন লগিংয়ের কিছু নিদর্শন এবং বিরোধী নিদর্শন কী কী? [বন্ধ]


66

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

দ্রষ্টব্য: আমি বুঝতে পারি যে লগগুলির মাধ্যমে সমস্ত বাগগুলি আবিষ্কারযোগ্য নয়। এটি লগগুলি ভয়ঙ্কর এমনটি পরিবর্তন করে না।

আমাদের লগিংয়ে কিছু সুস্পষ্ট সমস্যা রয়েছে যা আমরা ইতিমধ্যে সমাধানের চেষ্টা করতে পারি। আমি এখানে এগুলি তালিকাবদ্ধ করতে চাই না এবং আমি আপনাকে আমাদের লগ ফাইলগুলি প্রদর্শন করতে পারি না যাতে আপনি কী করতে হবে সে সম্পর্কে পরামর্শ দিতে পারেন।

পরিবর্তে, লগিং ফ্রন্টে আমরা কতটা খারাপ করছি তা নির্ধারণ করার জন্য, আমি জানতে চাই:

  1. কোনও অ্যাপ্লিকেশন লগ করার ক্ষেত্রে, বিশেষত বৃহত অ্যাপ্লিকেশনটির কিছু নির্দেশিকা কী , যদি থাকে ।
  2. আমাদের কি এমন কোন নিদর্শন অনুসরণ করা উচিত বা অ্যান্টি-প্যাটার্নগুলি সম্পর্কে আমাদের সচেতন হওয়া উচিত?
  3. এটি ঠিক করার জন্য কি গুরুত্বপূর্ণ বিষয় বা এটি এমনকি ঠিক করাও যেতে পারে বা সমস্ত লগ ফাইলগুলি কেবল বিশাল and

পার্শ্ব নোট: আমরা log4j ব্যবহার করি।

উত্তর:


55

আমার অনুশীলন দরকারী প্রমাণিত যে কয়েকটি পয়েন্ট:

  • আপনার প্রোডাকশন কোডে সমস্ত লগিং কোড রাখুন। উত্পাদনে বেশি / কম বিস্তারিত লগিং সক্ষম করার ক্ষমতা রাখুন, সর্বোপরি সাবসিস্টেম প্রতি এবং আপনার প্রোগ্রামটি পুনরায় চালু না করে।

  • লগগুলিকে সহজেই grepএবং চোখের মাধ্যমে পার্স করা সহজ করুন । প্রতিটি লাইনের শুরুতে কয়েকটি সাধারণ ক্ষেত্রের সাথে লেগে থাকুন। প্রতিটি লাইনে সময়, তীব্রতা এবং উপ-সিস্টেম সনাক্ত করুন। স্পষ্টভাবে বার্তাটি তৈরি করুন। প্রতিটি লগ বার্তাটিকে তার উত্স কোড লাইনে মানচিত্র করতে সহজ করুন।

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

লগগুলি বেশিরভাগ পর্যবেক্ষণ এবং সমস্যা সমাধানের জন্য প্রয়োজন। নিজেকে সমস্যা সমাধানের জুতোতে রাখুন এবং ভাবুন যে রাতের শেষদিকে যখন কোনও ভুল ঘটছে বা ঘটেছিল তখন আপনি কোন ধরণের লগ পেতে চান।


10
আমি এই উত্তরটি পছন্দ করি তবে আমি যুক্ত করব যে সিদ্ধান্ত পয়েন্টগুলিতে কী পছন্দ করা হয়েছিল তা লগ করা গুরুত্বপূর্ণ। আমি অনেকগুলি সিস্টেম দেখেছি যেখানে প্রচুর জাঙ্ক লগ করা হয়েছিল তবে মূল সিদ্ধান্তগুলি লগ করা হয়নি। সুতরাং লগিংয়ের 95% মূলত অকেজো। অনুরোধ / প্রতিক্রিয়া টাইপ সিস্টেমের জন্য সাবসিস্টেমের চেয়ে অনুরোধ অনুযায়ী লগ করতে সক্ষম হওয়া আরও গুরুত্বপূর্ণ।
কেভিন 0

4
+1 টি। নিজেকে একটি সমস্যা সমাধানকারী জুতা রাখার বিষয়ে আপনার বক্তব্যটি আমি পছন্দ করি। মনে হচ্ছে লগ স্টেটমেন্টগুলিতে আরও অনেক মানের বার্তা থাকা উচিত তারপর আমরা কী করছি ...
c_maker

1
এটি লক্ষ্য করা গুরুত্বপূর্ণ যে ত্রুটি লগিং অ্যাপোপিয়েট ইভেন্টলগের পাশাপাশি অ্যাপ্লিকেশন লগগুলিতে লগ করা উচিত।
স্টিভেন ইভার্স

2
@ এসএনআরফাস: লগ সংরক্ষণের একাধিক উপায় রয়েছে তবে সংক্ষেপে সারমর্মটি হ'ল লগ বার্তাগুলি সিস্টেম ক্র্যাশ হওয়া একেবারে শেষ দ্বিতীয়টি পর্যন্ত উপলব্ধ হওয়া দরকার - যেমন একটি বিমানের ব্ল্যাক বক্সের মতো। আপনি যদি কোনও ধরণের বাফারিং ব্যবহার করেন তবে এটিকে বাইপাস করতে / প্রতিটি বার্তা ফ্লাশ করার জন্য একটি বিকল্প সরবরাহ করুন।
rwong

1
@ রিগ: অন্যদিকে, অনেক গৃহ-বৃদ্ধ লগার কোনও বাফারিং বাস্তবায়ন করেনি (এবং প্রতিটি বার্তা যথাযথভাবে প্রবাহিত করেছেন), যা খুব খারাপ পারফরম্যান্সের দিকে নিয়ে যায়। এ কারণেই এটি অবশ্যই alচ্ছিক করা উচিত।
rwong

28

আমি সুরক্ষার সাথে সমালোচনামূলক রিয়েল-টাইম সিস্টেমগুলি নিয়ে কাজ করি এবং লগিং প্রায়শই বিরল বাগগুলি ধরার একমাত্র উপায় যা প্রতি 53 তম মঙ্গলবার একবার নীল চাঁদ দেখা দেয় যখন এটি পূর্ণিমা হয়, আপনি যদি আমার প্রবাহকে ধরেন। এই জাতীয় বিষয় আপনাকে विषयটি সম্পর্কে ক্ষিপ্ত করে তোলে, তাই যদি আমি মুখের দিকে ঝকঝকে শুরু করি তবে আমি এখনই ক্ষমা চাইব। নিম্নলিখিতটি নেটিভ কোড ডিবাগ লগগুলির জন্য রচিত হয়েছিল, তবে এটির বেশিরভাগ পরিচালিত বিশ্বেও প্রযোজ্য ...

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

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

off
errors only
basic
detailed
everything

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

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

#define DEBUG_ERROR          1
#define DEBUG_BASIC          2
#define DEBUG_DETAIL         4
#define DEBUG_MSG_BASIC      8
#define DEBUG_MSG_POLL       16
#define DEBUG_MSG_STATUS     32
#define DEBUG_METRICS        64
#define DEBUG_EXCEPTION      128
#define DEBUG_STATE_CHANGE   256
#define DEBUG_DB_READ        512
#define DEBUG_DB_WRITE       1024
#define DEBUG_SQL_TEXT       2048
#define DEBUG_MSG_CONTENTS   4096

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

সফ্টওয়্যারটি সাধারণত ERROR, বেসিক, STATE_CHANGE এবং এক্সেসপ্লেশন সহ জাহাজ চালিত হয়, তবে এটি ডিবাগ ডায়ালগের মাধ্যমে (বা একটি রেজিস্ট্রি / আইএনআই / সিএফজি সেটিং, যেখানে এই জিনিসগুলি সংরক্ষণ করা হয়) মাধ্যমে ক্ষেত্রটিতে পরিবর্তন করা যেতে পারে।

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

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


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

27

লগিং নির্দেশিকাগুলির জন্য আমার প্রিয় পাবলিক রিসোর্স হ'ল অ্যাপাচি জেসিএল সেরা অভ্যাস

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

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

জেসিএলকে লক্ষ্যবস্তু করা সত্ত্বেও এগুলি সাধারণভাবে লগিংয়ের জন্য গ্রহণযোগ্য পর্যাপ্ত জেনারেল বলে মনে হয়।

  • লগিংয়ের জন্য আমার ব্যক্তিগত "নির্দেশিকা" হ'ল ডিবাগ পর্যায়ে, আমি আমার লগগুলি একটি গল্পের মতো পড়ার চেষ্টা করি - বোধগম্য যুক্তিযুক্ত এবং পর্যাপ্ত (তবে বেশি বোঝা হয়নি) বিশদ সহ।

সর্বাধিক বিখ্যাত অ্যান্টি-প্যাটার্নটি সম্ভবত "ব্যতিক্রমগুলি গ্রাস করে" - এটির জন্য কেবল ওয়েব অনুসন্ধান করুন।

বিশাল লগিং ফাইলগুলির জন্য, আমার অনুশীলনে এটি বেশিরভাগ ক্ষেত্রেই স্বাভাবিক ছিল। এবং হ্যাঁ, সম্পূরক স্ক্রিপ্ট আপনি তাদের এবং / অথবা টুলস কল মত শৃঙ্খলাকৃতি করাত আমার স্বাভাবিক দেখুন।

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

গীত। বিরোধী নিদর্শন সম্পর্কে, অন্যেরা মনে মনে আসে তারা হ'ল "বন্যা" এবং মূর্খতাপূর্ণ বার্তা।

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

  • সংবেদনহীন বার্তাগুলি বেশ জনপ্রিয় আবর্জনা বলে মনে হচ্ছে। উত্স কোডে পড়ার সময় এগুলি নিরীহ দেখায় - আমার ধারণা ডিবাগ আউটপুট বিশ্লেষণের যন্ত্রণার মধ্য দিয়ে যেতে হবে ...

    step #1
    step #2
    step #3
    

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


4
বন্যা এড়াতে আমি সাধারণত লুপের হিউরিস্টিকস সংগ্রহ করি এবং লুপের পরে আউটপুট করি। অর্থ লুপে আকর্ষণীয় কিছু ঘটতে পারে একটি ভেরিয়েবল (লাইক somethingSpecialHappenedCount) এ সংরক্ষণ করা উচিত এবং তারপরে লগারে আউটপুট।
Spoike

@ স্পপিকে ভাল পয়েন্ট! ভেরিয়েবলে সংরক্ষণ করা বন্যার বিরুদ্ধে লড়াই করার জন্য আমার ব্যক্তিগত পছন্দের কৌশল
gtat

1
লুপ শেষ হওয়ার পরে লগটিতে ASCII- টেবিল হিসাবে লগারে সমস্ত বিভিন্ন কাউন্টার আউটপুট করি যাতে তারা সহজে তুলনা করতে পারে। টেবিল ধারণাটি স্প্রিংয়ের স্টপওয়াচ.স্প্রিটিটি প্রিন্ট () উত্পন্ন করে একটি দ্বারা অনুপ্রাণিত হয়েছিল । তা ছাড়া, লগ পাঠ্যটিকে পাঠযোগ্য ও প্রাসঙ্গিক করে তোলা উত্তরটিতে আগেই উল্লিখিত হিসাবে এখনও একটি "শিল্প"।
Spoike

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

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

11

ব্যতিক্রম লগইন করুন একবার!

একটি সাধারণ ব্যথা পয়েন্ট যা আমি লক্ষ্য করেছি তা হ'ল লগিং এবং একটি ব্যতিক্রম পুনর্বিবেচনা। ফলস্বরূপ, লগ ফাইলগুলি বেশ কয়েকটি স্ট্যাক স্তরে একাধিকবার একই ব্যতিক্রম ধারণ করে।


5

এখানে একটি অ্যান্টি-প্যাটার্ন রয়েছে: কল্পনাযোগ্য কোনও কিছু ট্র্যাক করার জন্য একটি ডেটাবেস টেবিলের মধ্যে দুই ডজন "জেনেরিভেরিভেবল" ক্ষেত্র তৈরি করা এবং তারপরে বিভিন্ন ধরণের লগের জন্য 88 (এবং গণনা) বিভিন্ন এনাম মান রয়েছে।


+1 - আমি এটি দেখেছি। স্ট্রিং 1, স্ট্রিং 2, স্ট্রিং 3, স্ট্রিং 4, স্ট্রিং 5 এর মতো কলাম রয়েছে এমন "ত্রুটি সারণী", যেখানে সমস্ত কলামগুলি একত্রিত করার ফলে একটি ত্রুটি কোড হবে যা কোনও ডকুমেন্টেশনে রেফারেন্স নেই। ফলাফল লগিং যা বিভ্রান্তিকর এবং অকেজো উভয়ই; "কাস্টম-ডেভলপমেন্ট-ডিবাগিং-হেল্ক সহ" তৃতীয় পক্ষ-এন্টারপ্রাইজ-অ্যাপ্লিকেশন হিসাবেও পরিচিত।
মরগান হের্লোকার

আমার ক্ষেত্রে এটি "লগিংয়ের আসলে কী জড়িত তার কোনও ধারণা ছাড়াই হ্যান্ড রোলড লগিং সিস্টেম"
ওয়েন মোলিনা

4

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

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


2

এখানে বাড়ির অপারেশন পাশ থেকে কয়েক নোট:

1) লগগুলি স্থানীয়ভাবে কনফিগারযোগ্য তা নিশ্চিত করুন, পছন্দসই কোনও সরঞ্জাম সহ কোনও পাঠ্য সম্পাদকের চেয়ে ভারী নয়। বেশিরভাগ সময় আমরা ট্র্যাক স্তরের লগিং পেতে চাই না, তবে আমরা এটি চালু করতে সক্ষম হতে পছন্দ করি।

2) যদি সম্ভব হয় তবে তা নিশ্চিত করুন যে লোগাগুলি কোনও সরঞ্জামের সাথে পাঠ্য সম্পাদকের চেয়ে ভারী কোনও পাঠানো যায় না। উত্পাদনের সিস্টেমটি ব্যর্থ হয়ে যাওয়ার সময় বিজোড় সময়ে কোনও সরঞ্জাম শিকারে যাবার চেয়ে খারাপ আর কিছুই নয়।


1

ওয়েব-অ্যাপ্লিকেশনগুলির সাথে কাজ করা আমার নিজের অভিজ্ঞতা থেকে:

(এবং স্টোরেজ বিবেচনা করা এখনকার দিনে খুব সস্তা)

  • আপনি যতটা উপলভ্য তথ্য পেতে পারেন (সেই মুহুর্তে) লগ ইন করুন।
  • আমি সর্বদা আমার লগ-স্ট্রিংগুলিতে ডেটটাইম.এখন অন্তর্ভুক্ত করি।
  • আমি সর্বদা (যদি এটি সম্ভব হয়) কিছু নির্দিষ্ট "ক্রিয়া" এর লগ-সময়কাল।
  • আপনার লগ-স্ট্রিংগুলির সাথে সামঞ্জস্য থাকুন। সর্বদা আমি এই ধরণের প্যাটার্নটি ব্যবহার করি:

    • "[তথ্য এক্স] [তথ্য ওয়াই] [তথ্য জেড] [ইত্যাদি]"

1

স্ট্যাকট্রেস ছাড়াও, বর্তমান অ্যাপ্লিকেশনের স্থিতি এবং ইনপুটটি লগ করুন।

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

অবশ্যই আরও ডেটা সর্বদা ভাল তবে সর্বনিম্ন এই দুটি সহজ ক্র্যাশগুলির জন্য একটি ভাল শুরু।


3
"সফ্টওয়্যার হ'ল নির্দোষ" => দুর্ভাগ্যবশত সবসময় হয় না। উদাহরণস্বরূপ সম্মতিমূলক বাগগুলি চিন্তা করুন।
assylias
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.