“কীভাবে লগ করবেন” অনেকগুলি ভিন্ন দৃষ্টিকোণ সহ সফটওয়্যার ইঞ্জিনিয়ারিংয়ের একটি আশ্চর্যজনকভাবে গভীর বিষয় এবং এগুলি বিভিন্ন পরিস্থিতিতে প্রায় সমস্ত বৈধ। আমি তর্ক করতে যাচ্ছি যে প্রচুর ইভেন্টের প্রক্রিয়া করার সময়, প্রতিটি এক্স বার্তাগুলির চেয়ে প্রতি x সেকেন্ডে লগ করা ভাল। এটি একটি সাধারণ ধারণা, তবে আমি এটি আগে কখনও লিখিত দেখিনি।
আসুন আমি কী বোঝাতে চাইছি তা বুঝতে দ্রুত কিছু সিউডোকোডের দিকে নজর দিন।
গণনা-ভিত্তিক লগিং
num_events_processed = 0
while True:
event = read_event_from_queue()
process_event(event)
num_events_processed += 1
if num_events_processed % 1_000 == 0:
module_logger.info("Processed 1000 events.")
সময় ভিত্তিক লগিং
last_time_logged = time.time()
num_events_processed_since_last_log = 0
while True:
event = read_event_from_queue()
process_event(event)
num_events_processed_since_last_log += 1
current_time = time.time()
if current_time - last_time_logged >= 1.0:
module_logger.info(f"Processed {num_events_processed_since_last_log} events.")
num_events_processed_since_last_log = 0
last_time_logged = current_time
সময় ভিত্তিক লগিং লেখার ডিফল্ট।
লগ রেট সামঞ্জস্যপূর্ণ হওয়া উচিত
আপনি যদি খুব বেশি লগ করেন:
- সময় ব্যয় করা লগিং সময় আপনি প্রক্রিয়াজাতকরণ ইভেন্টগুলি ব্যয় করছেন না। আপনি যখন আপনার সিস্টেমটি শিখর লোডে থাকে তখন আপনি ধীর হয়ে যান।
- প্রচুর অকেজো লগগুলি গ্রাস এবং ধরে রাখতে ব্যয়বহুল।
- প্রচুর অকেজো লগগুলি পর্যবেক্ষণযোগ্যতা হ্রাস করে লগগুলির মাধ্যমে অনুসন্ধানকে ধীর করে দেয়।
এবং যদি আপনি যথেষ্ট লগ না করেন:
- আপনার আবেদন এমনকি চলছে কিনা তা আপনি জানেন না!
- কম পর্যবেক্ষণযোগ্যতা।
প্রতিটি এক্স বার্তাগুলি লগ করার সমস্যাটি হ’ল এক্স এর জন্য ভাল মান নেই Your আপনার অ্যাপ্লিকেশনটি উত্পাদনে প্রতি সেকেন্ডে কয়েক মিলিয়ন বার্তা প্রক্রিয়া করতে পারে, তবে পরীক্ষার জন্য স্থানীয়ভাবে চালানোর সময় প্রতি সেকেন্ডে কেবল 5 ডলার। এই উভয় ক্ষেত্রে আপনার ধ্রুবক হারে লগগুলি নির্গত করা উচিত এবং সময়-ভিত্তিক লগিং এটি সরবরাহ করে।