একটি লগ ফাইল তৈরি করুন


22

লিনাক্সে কিছু লাইব্রেরি ফাংশন বা সি ল্যাঙ্গুয়েজে সিস্টেম কলের সাহায্যে / var / log / তে কিছু তথ্য বজায় রাখার জন্য লগ ফাইল করার কোনও উপায় আছে কি? এবং আমি লগটি লিখতে এবং প্রক্রিয়া করতে আমাদের যে মানগুলি অনুসরণ করা উচিত তাও জানতে চাই। ধন্যবাদ


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

উত্তর:


31

একটি সি প্রোগ্রাম থেকে লগ ইন করার আদর্শ উপায় হ'ল 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কল ব্যবহার করে ধরে নিই ।


ধন্যবাদ.এটি বেশ কার্যকর তথ্য। তবে আপনি দয়া করে log_local0-7 বিকল্পটি সম্পর্কে আরও ব্যাখ্যা করবেন। যেমন যেমন আমি সেলফ.লগ ফাইলে আমার ডেটা (লগ লাইনে <<> শব্দ আছে) লিখতে চাই। এবং অন্যান্য ফাইলগুলিতে কিছু লগ।
সুশান্ত জৈন

@ সুশান্ত জৈন: আপনি কোন লিনাক্স বিতরণ এবং সংস্করণটিকে লক্ষ্য করছেন? আপনার কি পুরানো সিসলগ (ksyslogd) বা আরএসস্লগ আছে? rpm -qa | grep syslogবা dpkg -l '*syslog*'সম্ভবত আপনাকে বলতে হবে।
মাইকেল

লগ_লোকাল * স্পষ্টতই, যখন সিসলগ sysklogdসফ্টওয়্যারটির জন্য শহরে একমাত্র খেলা ছিল তখন পেছনের দিক থেকে প্রতীক রয়েছে । আজকাল মত সফ্টওয়্যার syslog-ng, rsyslogএবং dsyslogবিদ্যমান এবং মাত্র সেবা / স্তর চেয়ে অনেক বেশী অত্যাধুনিক ফিল্টারিং দক্ষতা রয়েছে।
শাদুর

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

@ সুশান্ত জৈন সাহায্য করে আনন্দ পেলাম. দয়া করে আপনার লগ পার্সিংয়ের প্রশ্নটিকে একটি পৃথক প্রশ্ন হিসাবে পোস্ট করুন যাতে লোকেরা এটি দেখতে এবং যথাযথ উত্তর সরবরাহ করতে পারে।
মাইকেল

2

আপনি চাইবেন #include <syslog.h> , তারপরে syslog()যে কোনও সিস্টেম লগিং প্রোগ্রাম সক্রিয় রয়েছে তাতে ডেটা প্রেরণের জন্য ফাংশনগুলি ব্যবহার করুন ।

দেখুন man পৃষ্ঠা এখানে


syslog () ফাংশনটি / var / log / syslog এ ডেটা লিখে। যদিও আমি নিজের ফাইলটিতে লগ লিখতে চাই।
সুশান্ত জৈন

হিসাবে Mikel ব্যাখ্যা নীচের আপনি যেমন একটি উপায় আপনার লগ ইন বার্তা ট্যাগ করতে পারবেন syslog- র বুঝুন আপনি কি প্রোগ্রাম, তারপর কনফিগার syslog- র আপনার প্রোগ্রাম একটি আলাদা ফাইল লগ বার্তা লিখতে।
কালেব

1

সম্ভাবনা অনেক আছে, আপনার পরিকল্পনা কি? কমান্ড লাইন থেকে লগ করার জন্য আপনার কি কেবল একটি বিকল্প প্রয়োজন? একবার দেখুন logger( বিএসডিটিলে অন্তর্ভুক্ত )। লিখো:

usr@srv % logger test

এবং এটি আপনার কাছে এই জাতীয় কিছু লগ করবে /var/log/syslog:

Apr 25 07:55:15 localhost usr: test

আরো দেখুন man logger । আপনার লগিং ডিমনটির উপর নির্ভর করে আপনি এই বার্তাগুলিকে নির্দিষ্ট ফাইলগুলিতে বাছাই করতে পারেন বা অগ্রাধিকার অনুসারে এগুলি ফিল্টার করতে পারেন।

বিভিন্ন প্রোগ্রামিং ভাষার জন্য কিছু সমাধান রয়েছে, সুতরাং দয়া করে আমাকে বলুন আপনি কি করতে চান ;-)


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

1

প্রোগ্রামের নাম অনুসারে ফিল্টারিং উপরে বর্ণিত সংস্করণগুলির থেকে আলাদাভাবে লিখিত হয়েছে, এর সাম্প্রতিক সংস্করণগুলির জন্য rsyslog(আমার মেশিনের সংস্করণটি 5.8.6) নীচে দেখানো হয়েছে:

if $programname == 'popa3d' then /var/log/popa3d.log

আরও তথ্যের জন্য, এখানে দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.