पूंछ के लिए विभिन्न स्रोतों को रंगना


19

मैं अलग लॉग देख रहा हूँ

tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log

मैं अलग-अलग रंग के प्रत्येक लॉग का उत्पादन कैसे कर सकता हूं?


4
यह भी देखें कि टेल
ऑफ़

@MattBianco धन्यवाद, मैं एक नज़र में हूँ multitailऔर इस सवाल के जवाब
डैनियल डब्ल्यू।

1
नीचे दिए गए शानदार उत्तरों के अलावा, आप unix.stackexchange.com/questions/26313/colored-find-output को भी चेक करना चाह सकते हैं, जो दिखाता है कि आउटपुट फाइल को कलर करने के साथ बहुत कुछ कैसे किया जा सकता है।
जो

जवाबों:


21

grepरंग के लिए GNU का उपयोग करना :

color() { GREP_COLOR=$1 grep --color '.*'; }

(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33)

ध्यान दें कि पहले 2 पृष्ठभूमि में शुरू किए गए हैं। इसका मतलब यह है कि यदि आप दबाते हैं तो उन्हें नहीं मारा जाएगा Ctrl-C(शेल अतुल्यकालिक नौकरियों के लिए स्पष्ट रूप से उपेक्षा करें)।

इसे रोकने के लिए, आप इसके बजाय कर सकते हैं:

color() { GREP_COLOR=$1 grep --line-buffered --color=always '.*'; }

(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33) | cat

इस तरह से, Ctrl-Cअंतिम tail+grepऔर catमरने (साइगंट के) और अन्य दो grep + पूंछ एक SIGPIPE के मरने के बाद अगली बार जब वे कुछ लिखेंगे।

या SIGINT हैंडलर को पुनर्स्थापित करें (सभी गोले के साथ काम नहीं करेगा):

color() { GREP_COLOR=$1 grep --color '.*'; }

((trap - INT; tail -qf /var/log/syslog | color 31) &
(trap - INT; tail -qf /var/log/fail2ban.log | color 32) &
tail -qf /var/log/nginx/error.log | color 33)

आप इसे colorफंक्शन में भी कर सकते हैं । यह लागू नहीं होता है tail, लेकिन tailमरने पर अगली बार जब यह लिखते हैं तो किसी SIGPIPE की grepमृत्यु हो जाएगी।

color() (trap - INT; GREP_COLOR=$1 exec grep --color '.*')

(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33)

या पूरे टेल + grep को एक फंक्शन बनाएं:

tailc() (trap - INT; export GREP_COLOR="$1"; shift; tail -qf -- "$@" |
   grep --color '.*')
tailc 31 /var/log/syslog &
tailc 32 /var/log/syslog &
tailc 33 /var/log/nginx/error.log

या पूरी बात:

tailc() (
  while [ "$#" -ge 2 ]; do
    (trap - INT; tail -f -- "$2" | GREP_COLOR=$1 grep --color '.*') &
    shift 2
  done
  wait
)

tailc 31 /var/log/syslog 32 /var/log/syslog 33 /var/log/nginx/error.log

जब मैं इसे अपनी "watch.sh" स्क्रिप्ट में डालता हूं, तो यह मेरे कंसोल पर वापस आ जाता है लेकिन संदेश प्रिंट हो जाते हैं, देखें i.imgur.com/yaiBwMo.png
डैनियल डब्ल्यू।

@ देखें, संपादित करें
स्टीफन चेज़लस

इस उत्तर को लिखने में आपके प्रयास के लिए धन्यवाद, मैं उस tailcफ़ंक्शन के साथ गया, जिसने सबसे अच्छा काम किया और स्क्रिप्ट में सबसे सहज लग रहा है।
डैनियल डब्ल्यू।

4

इस तरह से मेरे लिए काम करना:

(tail -f /var/log/syslog | awk -W interactive '{printf "\033[1;31m%s\033[0m\n", $0}' & \
tail -f /var/log/auth.log | awk -W interactive '{printf "\033[1;32m%s\033[0m\n", $0}' & \
tail -f /var/log/Xorg.0.log | awk -W interactive '{printf "\033[1;34m%s\033[0m\n", $0}')

स्पष्टीकरण:

  • tail -f file: फ़ाइल बढ़ने पर डेटा को जोड़ें
  • awk -W interactive: awkइंटरेक्टिव मोड पर सेट करें
  • '{printf "\033[1;31m%s\033[0m\n", $0}' टर्मिनल को दिए गए आउटपुट को प्रिंट करें।
  • \033[1;31m मतलब लाल
  • \033[1;32m मतलब हरा
  • \033[1;34m मतलब नीला

-W interactiveलगता है, mawk-स्पेशल। (जिस तरह से mawkइसका इनपुट डिफ़ॉल्ट रूप से बफ़र करता है वह भी अद्वितीय है, और -W interactiveअन्य awkकार्यान्वयन में इसकी आवश्यकता नहीं होगी )।
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.