Table of Contents

বড়-মের C অ্যাপ্লিকেশন, লগ ইন করা হচ্ছে ডিবাগ ব্যবস্থা, পর্যবেক্ষণ এবং পদ্ধতি সংরক্ষিত সিস্টেমের জন্য একটি গুরুত্বপূর্ণ টুল। যদিও [[FLT] সাধারণ বিবৃতি বা লাইব্রেরীর মতো লাইব্রেরী [FODO:] হয়ত ছোট কোনো বাগ, এবং শৈলীর ক্ষেত্রে প্রায়শ:ই তারা স্বল্প সময়ের জন্য প্রয়োজনীয় সামগ্রী, এবং অভ্যাস দ্বারা প্রয়োজনীয় সামগ্রী প্রস্তুত করা যায় । এই পদ্ধতি ব্যবহার করা যায় না, এবং এর ফলে আপনার কাজের জন্য আপনার কাজের জন্য একটি সাধারণ পদ্ধতি তৈরি করা হয় । নতুন বৈশিষ্ট্য, এবং কাঠামোর ক্ষেত্রে আপনার টুল- ধাপ নির্ধারণের জন্য নতুন কোড সরবরাহ করা সম্ভব হয় । এই পদ্ধতি ব্যবহার করা সম্ভব নয়, এবং এর জন্য সঠিক মানের জন্য আপনার টুল- ধাপের মধ্যে একটি নমুনা তৈরি করা প্রয়োজন । উদাহরণ: একটি আদর্শ কোড সংরক্ষণ, এবং কাঠামোর উপর ভিত্তির উপর ভিত্তি স্থাপন করা। উদাহরণস্বরূপ, লগ করার জন্য CUTILUS-র মান নির্ধারণের জন্য বিভিন্ন পদ্ধতি ব্যবহার করা হয়।

কেন একটি স্বনির্ধারিত লগ- ইন সিস্টেম নির্মাণ করা হচ্ছে

প্রমিত লগিং, যেমন [[FLT] বা POSIX [FLT], [FLT], প্রায়ই গনিউলিটিলেশন এবং কর্মক্ষমতার অভাব থাকে । বড় একটি স্বনির্বাচিত লগার প্রস্তাব:

  • [[[F] [F] Opereddrications:[FLT] অপ্রয়োজনীয় বরাদ্দগুলো উপেক্ষা করা হবে না [FLT] এবং লগ-ইন স্তর মুছে ফেলা হলে চিহ্নিত স্তরগুলো উপেক্ষা করা হবে।
  • [[F]] অপ্রত্যাশিত ফরম্যাট:[F][FLT], parts::[FFLT], থ্রেড সনাক্তকরণ চিহ্ন, এবং মডিউলের উপসর্গগুলি লগ পড়া ও ধারণ করে।
  • [[F] GRIL [F] GrandrollL [FLT] নিয়ন্ত্রণ:[FLT] runn [FLT] লগের মাধ্যমে নির্দিষ্ট লগিং ব্যবস্থা সক্রিয়/নিষ্ক্রিয় করুন।
  • [[[[F] একাধিক গন্তব্য]:[[F]][FLT], ফাইল, নেটওয়ার্ক সকেট, বা বহিস্থিত মনিটরিং সিস্টেম একসাথে লেখা হবে।
  • [[F] Collph [[F] [FLT] ALL:[FLT] ALL] milks বা পারমাণবিক অপারেশনের সাহায্যে মাল্টি- শীর্ষচরণ সংক্রান্ত আউটপুটের মধ্যে উপস্থিত তথ্য সংরক্ষণের জন্য & পারমাণবিক ভর ব্যবহার করুন।

ডিজাইনগুলো বিশ্লেষণ করুন

আপনার লগ ইনিং সিস্টেমের মূল উপাদানগুলো ব্যাখ্যা করার আগে, এই সিদ্ধান্তগুলো API নকশা থেকে সবকিছু পরিমাপ করা হয় ।

লগের স্তর

যে মাত্রার স্তর উল্লেখ করা হবে । সাধারণ স্তরগুলো [FLT], [FLT], [FO],[FFO], [FOL], [FOD[FO], [FO:] [FLT], এবং[F] এর জন্য একটি সাধারণ মানের সীমা উল্লেখ করুন [F], এর নীচে উল্লেখ করুন [F] [F], এর ফলে সকল বস্তুর জন্য একটি সাধারণ উচ্চতা]: [FON [F], এর নীচে একটি সাধারণ মান নির্ধারণ করা যাবে না । [FOD] [F]]: [FOD]]] এর ফলে সকল স্তরগুলো মুছে ফেলা হবে [FON [F]]: [FOD]] এর ফলে সকল স্তরসমূহ উপেক্ষা করা যাবে ।

লগের গন্তব্যস্থল

যেখানে লেখা হবে, সেখানে লগ লেখা হবে। সাধারণত::

  • [[F][F][FOPL][FLT] -L] -D [FLT] - দ্রুত ডিবাগ ও দ্রুত ডিবাগ করার জন্য
  • [[[F][F][FLT] - >[FLT] - সহ ডিস্কে সংরক্ষণ এবং ডিস্কে সংরক্ষণের জন্য সংরক্ষণ করুন।
  • [[F][F]][FLT][FLT] - UNIX সিস্টেমে লগ-ইনকৃত লগ-ইন করা হচ্ছে।
  • [[F] নেটওয়ার্ক[FLT] [FLT] [FLT] -CHONECT সাব-সেটিং (g, গ্রেগ, ELKlet)

একটি নকশাকৃত প্রণালী একটি ডুবন্ত দাগ ব্যবহার করে যেটা আপনাকে ব্যবহার করতে দেয় গাড়ি চালানোর জন্য অথবা রাস্তা সরিয়ে ফেলে।

বিন্যাস ও সম্মেলনগুলো

সুসংগতির জন্য লগের বিন্যাস নির্ধারণ করা হয়। বস্তুর ক্ষেত্রে সময় নির্ধারণ করা হয় stcom, লগ- ইন নাম, উৎস- এর নাম, মডিউলের নাম এবং বার্তার অনুরূপ বিন্যাস যেমন JSONr/ আউটপুটের অনুরূপ বিন্যাসে গঠন করা হয়। কিন্তু সম্পাদনর জন্য একটি স্থায়ী বৃত্ত (যেমন, Shardef), Standr/ sougndles (উদাহরণস্বরূপ, ShutandoututPug) অথবা parations (etP) ব্যবহার করা ও হট-লাইন এর পরিবর্তে লগের মেমরি উল্লেখকৃত মেমরির মধ্যে সুসংগত করার জন্য সুনির্দিষ্ট বিন্যাস বিশিষ্ট একটি লগ ফাইলের বিন্যাস বিশিষ্ট।

নিরাপত্তা

একাধিক খোলা অ্যাপ্লিকেশনের দ্বারা উপলব্ধ Columdrnded ফাইল লেখা যাবে। [[FLTp:] প্রকৃত আই. ও.ও.পি. - এর আশেপাশে একটি জটিল অংশ অথবা একটি জটিল অংশ ব্যবহার করুন। উচ্চ পর্যায়ের সারিতে একটি লক বিনাভাবে লগ- ইন লাইন বিবেচনা করুন যা লগ করা হয় না, যে সমস্ত লগ- ইন বাফারের জন্য ফাঁকা লাইন চিহ্নিত করা হয়।

মৌলিক লগার

সাধারণ প্রয়োগের সাহায্যে, লগ-ইন সংক্রান্ত লগ- ইন তথ্য, সময়/উল্‌ফ ও পরিবর্তনযোগ্যggrade বার্তা সরবরাহ করা হয়। নিম্নলিখিত কোড একটি ভিত্তি জোগায়।

লগ স্তর

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
#include <pthread.h>

typedef enum {
 LOG_LEVEL_TRACE,
 LOG_LEVEL_DEBUG,
 LOG_LEVEL_INFO,
 LOG_LEVEL_WARN,
 LOG_LEVEL_ERROR,
 LOG_LEVEL_FATAL
} LogLevel;

static const char* level_strings[] = {
 "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"
};

static LogLevel g_min_level = LOG_LEVEL_INFO;
static pthread_mutex_t g_log_mutex = PTHREAD_MUTEX_INITIALIZER;

বার্তা বিন্যাস করা হচ্ছে

মূল লগিং ফাংশন [FLT] [F] নিরাপদে বার্তা ফরম্যাট করা] নিরাপদে বার্তা ফরম্যাট করা হয় । একটি স্থায়ী বাফার গরম পথে সারিবদ্ধ করা ঘরের বাইরে চলে যায়, কিন্তু দীর্ঘ মাপের বার্তার জন্য দীর্ঘ সময় ধরে সংযুক্ত বার্তাগুলির বিষয়ে সচেতন থাক ।

void log_message(LogLevel level, const char* file, int line, const char* func, const char* format, ...) {
 if (level < g_min_level) return;

 time_t now = time(NULL);
 struct tm* tm_info = localtime(&now);
 char time_buf[20];
 strftime(time_buf, sizeof(time_buf), "%Y-%m-%d %H:%M:%S", tm_info);

 pthread_mutex_lock(&g_log_mutex);

 // Write header
 fprintf(stdout, "[%s] [%s] [%s:%d %s] ", time_buf, level_strings[level], file, line, func);

 va_list args;
 va_start(args, format);
 vfprintf(stdout, format, args);
 va_end(args);

 fprintf(stdout, "\n");
 fflush(stdout); // Ensure immediate output for debugging

 pthread_mutex_unlock(&g_log_mutex);
}

সুবিধা সুবিধা সহ ম্যাক্রোর ব্যাখ্যা করুন যা স্বয়ংক্রিয়ভাবে উৎস ফাইল এবং লাইন ধারণ করে:

#define LOG_TRACE(...) log_message(LOG_LEVEL_TRACE, __FILE__, __LINE__, __func__, __VA_ARGS__)
#define LOG_DEBUG(...) log_message(LOG_LEVEL_DEBUG, __FILE__, __LINE__, __func__, __VA_ARGS__)
// ... similar for INFO, WARN, ERROR, FATAL

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

int main() {
 LOG_INFO("Application started on port %d", 8080);
 LOG_WARN("Disk usage exceeding %.1f%%", 85.3);
 LOG_ERROR("Failed to open file: %s", "config.dat");
 return 0;
}

ফাইল আউটপুট এবং আবর্তন সংক্রান্ত ডায়লগ যোগ করুন

ডিভেলপমেন্ট সংস্করণে উপস্থিত কনসোল আউটপুট প্রয়োজনীয় কিন্তু প্রোডাকশন সিস্টেমের স্থায়ী লগ ফাইল থেকে লগ ফাইলে একটি ফাইল সংযুক্ত করা প্রয়োজন। যে প্রতিrt ফাইল লগ ফাইলে লেখা প্রয়োজন তা হলো লগ ফাইলের সেটের একটি প্যাচ (paKS)।

ফাইল লগ সংরক্ষণ করা হচ্ছে

ফাইলের পয়েন্টারের পাশে উপস্থিত লগ ফাইল থেকে উদ্ধার করুন। কোনো পাথ অথবা ফাইলটিকে প্রতিস্থাপন করার উদ্দেশ্যে চিহ্নিত করে, সংশ্লিষ্ট নিঃশব্দx ফাইল লেখা হয়।

static FILE* g_log_file = NULL;

int log_init_file(const char* path) {
 g_log_file = fopen(path, "a");
 return (g_log_file != NULL) ? 0 : -1;
}

void log_message_file(LogLevel level, const char* file, int line, const char* func, const char* format, ...) {
 // Same timestamp and header logic, but write to g_log_file
 // ...
}

লগ আবর্তন কৌশল

ফাইলের মান স্বয়ংক্রিয়ভাবে সম্পূর্ণ করার জন্য ফাইল সংরক্ষণ করতে ও অস্থায়ীভাবে ব্যবহার করা থেকে বিরত হওয়া ফাইল ডি-কোড করতে, মাপ, তারিখ অথবা উভয় ক্ষেত্রে স্বয়ংক্রিয়ভাবে তা প্রয়োগ করা সম্ভব হবে। সহজ কৌশল:

  • প্রত্যেক লেখা পর বর্তমান ফাইল মাপ:
  • ফাইলের নামের সীমা অতিক্রান্ত হলে (উদাহরণস্বরূপ, ১০০ MB), এটি পুনরায় নাম লেখা হবে ([[[[FFLT], তারপর পুরোনো ফাইল ([FFO], তারপর একটি নতুন খোলা ফাইল খোলা হবে [FD]::2:::222::::222
  • সর্বাধিক যে সংখ্যক ফাইলগুলি উপেক্ষা করা হবে; পুরোনো ফাইলগুলি মুছে ফেলা হবে ।

নমুনা কাঠামো:

void log_rotate_if_needed() {
 if (g_log_file && ftell(g_log_file) > MAX_LOG_SIZE) {
 fclose(g_log_file);
 // Rename and compress logic
 g_log_file = fopen(LOG_PATH, "a");
 }
}

কর্মক্ষমতার জন্য Ahrouzous লগ করা হয়েছে

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

নির্মাতা-কনফিগারার প্যাটার্ন

একটি কনফিডড রিং বাফার অথবা একটি লক-ডাউন লাইন (যেমন, [FFLT] ব্যবহার করুন । লগ করার জন্য একটি সাধারণ AP:x [FLT] অথবা অল্প sox সহ একটি সাধারণ তালিকা । একটি উৎসর্গীকৃত থ্রেড দ্বারা সারিতে সারিতে সারিতে আটকে দেওয়া হয়েছে ।

সুবিধা:

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

লাহর ম্যাপ

#define QUEUE_SIZE 8192
static char g_log_queue[QUEUE_SIZE][MAX_LOG_LINE];
static volatile int g_queue_head = 0, g_queue_tail = 0;
static pthread_mutex_t g_queue_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t g_queue_notify = PTHREAD_COND_INITIALIZER;

void push_log(const char* logline) {
 pthread_mutex_lock(&g_queue_mutex);
 // Copy and advance head (ring buffer)
 strncpy(g_log_queue[g_queue_head], logline, MAX_LOG_LINE);
 g_queue_head = (g_queue_head + 1) % QUEUE_SIZE;
 pthread_cond_signal(&g_queue_notify);
 pthread_mutex_unlock(&g_queue_mutex);
}

void* log_flush_thread(void* arg) {
 while (1) {
 pthread_mutex_lock(&g_queue_mutex);
 while (g_queue_head == g_queue_tail)
 pthread_cond_wait(&g_queue_notify, &g_queue_mutex);
 // Dequeue and write to file/console
 char buffer[MAX_LOG_LINE];
 strncpy(buffer, g_log_queue[g_queue_tail], MAX_LOG_LINE);
 g_queue_tail = (g_queue_tail + 1) % QUEUE_SIZE;
 pthread_mutex_unlock(&g_queue_mutex);
 // Perform I/O (protected by the same file mutex)
 fputs(buffer, g_log_file);
 }
 return NULL;
}

IMAP-র বৈশিষ্ট্য

এই পদ্ধতি একবার কার্যকর হলে, বড় আকারে এই বৃদ্ধিকে বিবেচনা করা হবে।

কাঠামোযুক্ত (JoSON)

কাঠামোবদ্ধ লগ স্বয়ংক্রিয় বিশ্লেষণ সক্রিয় করো । একটি লাইটওয়েট JSON লাইব্রেরি যেমন [FFROL] [FRECR][FON][FFOPL][F1] ব্যবহার করো] বস্তু নির্মাণ করতে: উদাহরণ: উদাহরণ

{"timestamp":"2025-03-20T10:15:30Z","level":"ERROR","module":"auth","message":"Login failed","user":"john"}

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

Sslog অথবা নেটওয়ার্ক দ্বারা দূরবর্তী লগ-ইন করা হচ্ছে

বিতরণকৃত সিস্টেমের জন্য, কেন্দ্রীয় সংগ্রহরত কোনো ঘড়ির জন্য & লগ ইন করুন । POSIX[FLT] ফাংশন [FLT] [FO][F0][FO]][FON]][FO]]][F1]]]]\t\t. pard [1]]]]]] full asans]]] [FOD.:: p, fields., ALL.netg::::::::: /%sgal (lig:]]] [timesansturgistal boxstal (lationstal pal (সাধারণ) verstal verstststststspergals.

কনফিগারেশন ফাইল

অপারেটররা লগ PEApplation ফাইল আর না করে ত্রুটির নির্দেশ দেয়: লগ ফাইল, ram, gator, মাপ ও আউটপুটের মাত্রা, এবং আউটপুটের জন্য একটি সহজ acDont পাথ পার্স করতে পারে । সাধারণ কোনো সিগন্যাল দ্বারা এটি পুনরায় লোড করা যাবে (যেমন: /F2::::::) ।

সর্বোত্তম অভ্যাস এবং পিট পটাজ

সাধারণ ভুলগুলো এড়িয়ে চলুন, যা লগের মূল্যকে ছোট করে তোলে ।

কর্মক্ষমতার কর্মক্ষমতা

লগ করা হচ্ছে না । কোন বোতলের আর্গুমেন্টের পূর্বে লগ- ইনের মাত্রা পরীক্ষা করা উচিত নয় । যে মান খুব দ্রুত মূল্য দেয় ।\ t[FOFLT]\ t\ t

নিরাপত্তা চিন্তা

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

সংগতির পক্ষ থেকে Colice মডিউল

একটি কোম্পানিকে লগিং সম্মেলন স্থাপন করুন । অদ্বিতীয় মডিউল উপপদ (যেমন: [FFFFF], [FR:],[FOP] এবং একটি প্রমিত সময়ের বিন্যাস ব্যবহার করা হয়েছে (সি. সি.) । লগ- এর ফলে অপারেশন দল এটিকে সঠিকভাবে পার্স করতে পারে ।

অন্তর্ভুক্ত

C- র একটি স্বনির্বাচিত লগিং সিস্টেম বড় আকারে প্রদর্শনের প্রয়োজন এবং কর্মক্ষম অ্যাপলিকেশনের জন্য প্রয়োজনীয় । লগ- ইন ব্যবস্থা, sink, sink, sink, sttyP, এবং তারিখের অনুরূপ বৈশিষ্ট্য সহ আরম্ভ করা যায় । এই প্রবন্ধে বিস্তারিত তথ্য ধীরে ধীরে ধীরে আপনি পরিবর্তন করতে পারেন । এই মানগুলির একটি প্রধান কাজ হিসাবে, এবং তা আরো সতর্ক করতে পারেন । [F]: // t\tp]: [F]