2013-02-23 50 views
28

लिनक्स में, मुझे पता है कि /var/log/messages फाइल करने के लिए एक बस संदेश लिखने के लिए, एक साधारण खोल स्क्रिप्ट मैं बनाया में:बैश शेल स्क्रिप्ट - कस्टम लॉग करने के लिए लिखें फाइल

#!/bin/bash 
logger "have fun!" 

मैं में संदेशों को फेंकने बंद करना चाहते हैं डिफ़ॉल्ट /var/log/messages फ़ाइल, और अपना खुद का बनाएँ।

#!/bin/bash 
logger "have more fun" > /var/log/mycustomlog 

यह अभी भी /var/log/messages को लॉग:

मैं इस कोशिश की। इसने /var/log/mycustomlog बनाया, लेकिन यह खाली है।

कोई भी देखता है कि मैं क्या खो रहा हूं?

+4

नहीं तो आप बस * गूंज के साथ * लकड़हारा * जगह ले सकता है *? – jazzytomato

+0

मुझे नहीं लगता कि आप यह कर सकते हैं: http://stackoverflow.com/questions/13423303/how-can-i-log-to-a- विशिष्ट- फ़ाइल-in-linux-using-logger-command – squiguy

+0

मानक आउटपुट को पुनर्निर्देशित करना काम नहीं करता है क्योंकि 'लॉगर' मानक आउटपुट पर नहीं लिखता है; यह लॉग संदेश प्राप्त करने के लिए 'syslog (3) 'द्वारा कॉन्फ़िगर की गई फ़ाइल को लिखता है। – chepner

उत्तर

24

@chepner एक अच्छा मुद्दा बनाते हैं कि logger संदेशों को लॉग इन करने के लिए समर्पित है।

मुझे यह उल्लेख करने की आवश्यकता है कि @ थॉमस हरैटिक ने बस पूछा कि मैंने echo का उपयोग क्यों नहीं किया।

उस समय, मुझे गूंज के बारे में पता नहीं था, क्योंकि मैं shell-scripting सीख रहा हूं, लेकिन वह सही था।

मेरे सरल समाधान अब यह है:

#!/bin/bash 
echo "This logs to where I want, but using echo" > /var/log/mycustomlog 

उपरोक्त उदाहरण>

तो बाद फ़ाइल के ऊपर लिख देगा, मैं इस के साथ उस फ़ाइल को संलग्न कर सकते हैं:

#!/bin/bash 
echo "I will just append to my custom log file" >> /var/log/customlog 

धन्यवाद दोस्तों!

    एक तरफ ध्यान दें पर
  • , यह बस /var/log/ में मेरे निजी लॉग रखने के लिए मेरी निजी पसंद है, लेकिन मुझे यकीन है कि वहाँ वहाँ अन्य अच्छा विचार कर रहे हैं रहा हूँ। और चूंकि मैंने डिमन नहीं बनाया है, /var/log/ शायद मेरी कस्टम लॉग फ़ाइल के लिए सबसे अच्छी जगह नहीं है। (बस कह)
+3

'/ var/log' वास्तव में किसी भी प्रकार के लॉग के लिए सबसे अच्छी जगह है। –

+6

@ एन्सरगर एक स्कैटोलॉजिकल उत्तर से बचने के लिए संघर्ष कर रहा है। –

3

आप लकड़हारा मैन ऑफ द पेज को देखते हैं:

$ man logger 

लकड़हारा (1) बी एस डी सामान्य आदेश मैनुअल लकड़हारा (1)

नाम लकड़हारा - एक शेल कमांड syslog (3) सिस्टम लॉग मॉड्यूल

SYNOPSIS लकड़हारा [-isd] [-f फ़ाइल] [-p pri] [आयकर टैग] [-u सॉकेट] [संदेश के लिए इंटरफ़ेस ... ]

विवरण लॉगर सिस्टम लॉग में प्रविष्टियां करता है। यह syslog (3) सिस्टम लॉग मॉड्यूल में शेल कमांड इंटरफ़ेस प्रदान करता है।

यह स्पष्ट रूप से कहता है कि यह सिस्टम लॉग पर लॉग इन करेगा। अगर आप फ़ाइल में लॉग इन करना चाहते हैं, तो आप लॉग फ़ाइल पर रीडायरेक्ट करने के लिए ">>" का उपयोग कर सकते हैं।

29

logger syslog सुविधाओं पर लॉग इन करता है। यदि आप संदेश को किसी विशेष फ़ाइल पर जाना चाहते हैं तो आपको तदनुसार syslog कॉन्फ़िगरेशन को संशोधित करना होगा।आप इस तरह की एक पंक्ति जोड़ सकते हैं:

local7.* -/var/log/mycustomlog 

और syslog को पुनरारंभ करें। फिर आप इस तरह लॉग इन कर सकते हैं:

logger -p local7.info "information message" 
logger -p local7.err "error message" 

और संदेश सही लॉग स्तर के साथ वांछित लॉगफाइल में दिखाई देंगे।

समनुरूपण को में परिवर्तन करने के बिना आप logger इस तरह इस्तेमाल कर सकते हैं:

logger -s "foo bar" 2>> /var/log/mycustomlog 

कि logger हिदायत होगा STDERR को संदेश के रूप में अच्छी तरह से (syslog में यह प्रवेश करने के अलावा) मुद्रित करने के लिए है, तो आप कर सकते थे एक फ़ाइल में STDERR पुनर्निर्देशित करें। हालांकि, यह पूरी तरह से व्यर्थ होगा, क्योंकि संदेश पहले से ही syslog के माध्यम से लॉग इन है (डिफ़ॉल्ट प्राथमिकता user.notice के साथ)।

5

खोल के वैश्विक वैरिएबल के माध्यम से खोल स्क्रिप्ट के लिए लॉगिंग पर अच्छी जानकारी है। हम शैल स्क्रिप्ट में समान प्रकार के लॉगिंग का अनुकरण कर सकते हैं: http://cubicrace.com/2016/03/efficient-logging-mechnism-in-shell.html

इस पोस्ट में INFO, DEBUG, ERROR जैसे लॉग इन स्तरों पर जानकारी है। स्क्रिप्ट प्रविष्टि, स्क्रिप्ट निकास, फ़ंक्शन एंट्री, फ़ंक्शन निकास जैसे विवरणों का पता लगाना।

नमूना लॉग: enter image description here