C प्रोग्राम से लॉग इन करने का मानक तरीका है syslog
।
हेडर फ़ाइल को शामिल करके प्रारंभ करें:
#include <syslog.h>
फिर अपने कार्यक्रम की शुरुआत में, आपको कॉल करके syslog को कॉन्फ़िगर करना चाहिए 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
अपने विकल्पों के लिए देखें ।
दूसरे और तीसरे तर्क प्रिंटफ़ की तरह एक प्रारूप और एक संदेश हैं।
यह किस लॉग फ़ाइल में दिखाई देता है यह आपकी 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
Syslogtag में ":" होना चाहिए।
या, यदि आप अपने सॉफ़्टवेयर को अन्य लोगों को वितरित करने की योजना बना रहे हैं, तो संभवतः इसका उपयोग LOG_LOCAL
या rsyslog
फ़िल्टर पर भरोसा करने के लिए एक अच्छा विचार नहीं है ।
उस स्थिति में, आपको LOG_USER
(यदि यह एक सामान्य प्रोग्राम है) या LOG_DAEMON
(यदि यह एक सर्वर है) का उपयोग करना चाहिए, तो अपने स्टार्टअप संदेशों और त्रुटि संदेशों का उपयोग करके syslog
लिखें, लेकिन अपने सभी लॉग संदेशों को किसी फ़ाइल के बाहर लिखें syslog
। उदाहरण के लिए, अपाचे एचटीटीपी लॉग करता है /var/log/apache2/*
या /var/log/httpd/*
, मैं नियमित open
/ fopen
और write
/ printf
कॉल का उपयोग करता हूं ।