লিনাক্সে কিছু লাইব্রেরি ফাংশন বা সি ল্যাঙ্গুয়েজে সিস্টেম কলের সাহায্যে / var / log / তে কিছু তথ্য বজায় রাখার জন্য লগ ফাইল করার কোনও উপায় আছে কি? এবং আমি লগটি লিখতে এবং প্রক্রিয়া করতে আমাদের যে মানগুলি অনুসরণ করা উচিত তাও জানতে চাই। ধন্যবাদ
লিনাক্সে কিছু লাইব্রেরি ফাংশন বা সি ল্যাঙ্গুয়েজে সিস্টেম কলের সাহায্যে / var / log / তে কিছু তথ্য বজায় রাখার জন্য লগ ফাইল করার কোনও উপায় আছে কি? এবং আমি লগটি লিখতে এবং প্রক্রিয়া করতে আমাদের যে মানগুলি অনুসরণ করা উচিত তাও জানতে চাই। ধন্যবাদ
উত্তর:
একটি সি প্রোগ্রাম থেকে লগ ইন করার আদর্শ উপায় হ'ল syslog
।
হেডার ফাইলটি অন্তর্ভুক্ত করে শুরু করুন:
#include <syslog.h>
তারপরে আপনার প্রোগ্রামের শুরুতে, আপনার কল করে সিসলগ কনফিগার করা উচিত openlog
:
openlog("programname", 0, LOG_USER);
প্রথম যুক্তি হ'ল সনাক্তকরণ বা ট্যাগ, যা প্রতিটি বার্তার শুরুতে স্বয়ংক্রিয়ভাবে যুক্ত হয়। আপনার প্রোগ্রামের নাম এখানে রাখুন।
দ্বিতীয় যুক্তি হ'ল বিকল্পগুলি যা আপনি ব্যবহার করতে চান বা 0
সাধারণ আচরণের জন্য। বিকল্পগুলির সম্পূর্ণ তালিকাটি রয়েছে man 3 syslog
। আপনি LOG_PID
যেটিকে দরকারী মনে করতে পারেন তা হ'ল সিসলগ লগ বার্তায় প্রক্রিয়া আইডি রেকর্ড করে।
তারপরে, আপনি যখনই লগ বার্তা লিখতে চান, আপনি কল করবেন syslog
:
syslog(LOG_INFO, "%s", "Message");
প্রথম যুক্তি হল অগ্রাধিকার। থেকে অগ্রাধিকার রেঞ্জ DEBUG
(কম গুরুত্বপূর্ণ) এর EMERG
সঙ্গে (শুধুমাত্র জরুরী অবস্থার জন্য) DEBUG
, INFO
এবং ERR
সবচেয়ে বেশি ব্যবহৃত হচ্ছে। man 3 syslog
আপনার বিকল্পগুলির জন্য দেখুন ।
দ্বিতীয় এবং তৃতীয় আর্গুমেন্টগুলি হ'ল প্রিন্টফের মতো একটি বিন্যাস এবং বার্তা।
এটিতে উপস্থিত কোন লগ ফাইলটি আপনার সিলেগ সেটিংসের উপর নির্ভর করে।
একটি ডিফল্ট সেটআপ সহ, এটি সম্ভবত প্রবেশ করে /var/log/messages
।
আপনি সীমাতে LOG_LOCAL0
যে কোনও একটি সুবিধা ব্যবহার করে একটি কাস্টম লগ ফাইল সেট আপ করতে পারেন LOG_LOCAL7
।
আপনি এগুলি পরিবর্তন করে ব্যবহার করুন:
openlog("programname", 0, LOG_USER);
থেকে
openlog("programname", 0, LOG_LOCAL0);
অথবা
openlog("programname", 0, LOG_LOCAL1);
প্রভৃতি
এবং একটি সম্পর্কিত এন্ট্রি যুক্ত /etc/syslog.conf
, যেমন
local1.info /var/log/programname.log
এবং syslog সার্ভার পুনরায় আরম্ভ, উদা
pkill -HUP syslogd
.info
অংশ local1.info
উপরে মানে সকল বার্তা আছে INFO
বা তার বেশি গুরুত্বপূর্ণ লগ করা হবে না সহ INFO
, NOTICE
, ERR
(ত্রুটি), CRIT
(সমালোচনামূলক), ইত্যাদি, কিন্তু না DEBUG
।
অথবা, আপনি আছে যদি rsyslog
, আপনি একটি চেষ্টা করে দেখতে পারেন সম্পত্তি ভিত্তিক ফিল্টার , যেমন
:syslogtag, isequal, "programname:" /var/log/programname.log
অথবা, যদি আপনি নিজের সফ্টওয়্যারটি অন্য লোকের কাছে বিতরণের পরিকল্পনা করে থাকেন তবে সম্ভবত LOG_LOCAL
কোনও rsyslog
ফিল্টার ব্যবহার করে বা নির্ভর করা ভাল ধারণা নয় ।
LOG_USER
সেক্ষেত্রে আপনার ব্যবহার করা উচিত (এটি যদি কোনও সাধারণ প্রোগ্রাম থাকে) বা LOG_DAEMON
(এটি যদি কোনও সার্ভার থাকে) ব্যবহার করে আপনার স্টার্টআপ বার্তা এবং ত্রুটি বার্তাগুলি syslog
লিখুন তবে আপনার সমস্ত লগ বার্তা বাইরের কোনও ফাইলে লিখুন syslog
। উদাহরণস্বরূপ, অ্যাপাচি এইচটিটিপিডি লগ হয় /var/log/apache2/*
বা /var/log/httpd/*
, আমি নিয়মিত open
/ fopen
এবং write
/ printf
কল ব্যবহার করে ধরে নিই ।
rpm -qa | grep syslog
বা dpkg -l '*syslog*'
সম্ভবত আপনাকে বলতে হবে।
sysklogd
সফ্টওয়্যারটির জন্য শহরে একমাত্র খেলা ছিল তখন পেছনের দিক থেকে প্রতীক রয়েছে । আজকাল মত সফ্টওয়্যার syslog-ng
, rsyslog
এবং dsyslog
বিদ্যমান এবং মাত্র সেবা / স্তর চেয়ে অনেক বেশী অত্যাধুনিক ফিল্টারিং দক্ষতা রয়েছে।
আপনি চাইবেন #include <syslog.h>
, তারপরে syslog()
যে কোনও সিস্টেম লগিং প্রোগ্রাম সক্রিয় রয়েছে তাতে ডেটা প্রেরণের জন্য ফাংশনগুলি ব্যবহার করুন ।
দেখুন man পৃষ্ঠা এখানে ।
সম্ভাবনা অনেক আছে, আপনার পরিকল্পনা কি? কমান্ড লাইন থেকে লগ করার জন্য আপনার কি কেবল একটি বিকল্প প্রয়োজন? একবার দেখুন logger
( বিএসডিটিলে অন্তর্ভুক্ত )। লিখো:
usr@srv % logger test
এবং এটি আপনার কাছে এই জাতীয় কিছু লগ করবে /var/log/syslog
:
Apr 25 07:55:15 localhost usr: test
আরো দেখুন man logger
। আপনার লগিং ডিমনটির উপর নির্ভর করে আপনি এই বার্তাগুলিকে নির্দিষ্ট ফাইলগুলিতে বাছাই করতে পারেন বা অগ্রাধিকার অনুসারে এগুলি ফিল্টার করতে পারেন।
বিভিন্ন প্রোগ্রামিং ভাষার জন্য কিছু সমাধান রয়েছে, সুতরাং দয়া করে আমাকে বলুন আপনি কি করতে চান ;-)