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कॉल का उपयोग करता हूं ।